How about monkey-patching Data::Dumper?
use Data::Dumper;
use DateTime;
use DateTime::TimeZone;
use Math::BigInt;
$var = {
number => 1,
bigint => Math::BigInt->new(),
datetime => DateTime->now(),
tz => DateTime::TimeZone->new( name => 'America/Chicago' ),
};
$Data::Dumper::Useperl = 1;
*Data::Dumper::_dump_orig = \&Data::Dumper::_dump;
*Data::Dumper::_dump = sub {
return "Math::BigInt->new('".$_[1]->bstr()."')"
if ref $_[1] eq 'Math::BigInt';
return "rfc822('".$_[1]->strftime("%a, %d %b %Y %H:%M:%S %z")."')"
if ref $_[1] eq 'DateTime';
return ref $_[1]
if (ref $_[1]) =~ /^DateTime::TimeZone::/;
goto &Data::Dumper::_dump_orig;
};
print Dumper($var);
Running it returns this:
$VAR1 = {
'bigint' => Math::BigInt->new('0'),
'number' => 1,
'tz' => DateTime::TimeZone::America::Chicago,
'datetime' => rfc822('Wed, 03 Dec 2008 04:12:53 +0000')
};
Note that most people would prefer that you subclass Data::Dumper to do the same thing, but this works if you need something quick and dirty.