1# 2# Data/Dumper.pm 3# 4# convert perl data structures into perl syntax suitable for both printing 5# and eval 6# 7# Documentation at the __END__ 8# 9 10package Data::Dumper; 11 12$VERSION = '2.121_08'; 13 14#$| = 1; 15 16use 5.006_001; 17require Exporter; 18require overload; 19 20use Carp; 21 22BEGIN { 23 @ISA = qw(Exporter); 24 @EXPORT = qw(Dumper); 25 @EXPORT_OK = qw(DumperX); 26 27 # if run under miniperl, or otherwise lacking dynamic loading, 28 # XSLoader should be attempted to load, or the pure perl flag 29 # toggled on load failure. 30 eval { 31 require XSLoader; 32 }; 33 $Useperl = 1 if $@; 34} 35 36XSLoader::load( 'Data::Dumper' ) unless $Useperl; 37 38# module vars and their defaults 39$Indent = 2 unless defined $Indent; 40$Purity = 0 unless defined $Purity; 41$Pad = "" unless defined $Pad; 42$Varname = "VAR" unless defined $Varname; 43$Useqq = 0 unless defined $Useqq; 44$Terse = 0 unless defined $Terse; 45$Freezer = "" unless defined $Freezer; 46$Toaster = "" unless defined $Toaster; 47$Deepcopy = 0 unless defined $Deepcopy; 48$Quotekeys = 1 unless defined $Quotekeys; 49$Bless = "bless" unless defined $Bless; 50#$Expdepth = 0 unless defined $Expdepth; 51$Maxdepth = 0 unless defined $Maxdepth; 52$Pair = ' => ' unless defined $Pair; 53$Useperl = 0 unless defined $Useperl; 54$Sortkeys = 0 unless defined $Sortkeys; 55$Deparse = 0 unless defined $Deparse; 56 57# 58# expects an arrayref of values to be dumped. 59# can optionally pass an arrayref of names for the values. 60# names must have leading $ sign stripped. begin the name with * 61# to cause output of arrays and hashes rather than refs. 62# 63sub new { 64 my($c, $v, $n) = @_; 65 66 croak "Usage: PACKAGE->new(ARRAYREF, [ARRAYREF])" 67 unless (defined($v) && (ref($v) eq 'ARRAY')); 68 $n = [] unless (defined($n) && (ref($v) eq 'ARRAY')); 69 70 my($s) = { 71 level => 0, # current recursive depth 72 indent => $Indent, # various styles of indenting 73 pad => $Pad, # all lines prefixed by this string 74 xpad => "", # padding-per-level 75 apad => "", # added padding for hash keys n such 76 sep => "", # list separator 77 pair => $Pair, # hash key/value separator: defaults to ' => ' 78 seen => {}, # local (nested) refs (id => [name, val]) 79 todump => $v, # values to dump [] 80 names => $n, # optional names for values [] 81 varname => $Varname, # prefix to use for tagging nameless ones 82 purity => $Purity, # degree to which output is evalable 83 useqq => $Useqq, # use "" for strings (backslashitis ensues) 84 terse => $Terse, # avoid name output (where feasible) 85 freezer => $Freezer, # name of Freezer method for objects 86 toaster => $Toaster, # name of method to revive objects 87 deepcopy => $Deepcopy, # dont cross-ref, except to stop recursion 88 quotekeys => $Quotekeys, # quote hash keys 89 'bless' => $Bless, # keyword to use for "bless" 90# expdepth => $Expdepth, # cutoff depth for explicit dumping 91 maxdepth => $Maxdepth, # depth beyond which we give up 92 useperl => $Useperl, # use the pure Perl implementation 93 sortkeys => $Sortkeys, # flag or filter for sorting hash keys 94 deparse => $Deparse, # use B::Deparse for coderefs 95 }; 96 97 if ($Indent > 0) { 98 $s->{xpad} = " "; 99 $s->{sep} = "\n"; 100 } 101 return bless($s, $c); 102} 103 104sub init_refaddr_format { 105 require Config; 106 my $f = $Config::Config{uvxformat}; 107 $f =~ tr/"//d; 108 our $refaddr_format = "0x%" . $f; 109} 110 111sub format_refaddr { 112 require Scalar::Util; 113 sprintf our $refaddr_format, Scalar::Util::refaddr(shift); 114} 115 116# 117# add-to or query the table of already seen references 118# 119sub Seen { 120 my($s, $g) = @_; 121 if (defined($g) && (ref($g) eq 'HASH')) { 122 my($k, $v, $id); 123 while (($k, $v) = each %$g) { 124 if (defined $v and ref $v) { 125 $id = format_refaddr($v); 126 if ($k =~ /^[*](.*)$/) { 127 $k = (ref $v eq 'ARRAY') ? ( "\\\@" . $1 ) : 128 (ref $v eq 'HASH') ? ( "\\\%" . $1 ) : 129 (ref $v eq 'CODE') ? ( "\\\&" . $1 ) : 130 ( "\$" . $1 ) ; 131 } 132 elsif ($k !~ /^\$/) { 133 $k = "\$" . $k; 134 } 135 $s->{seen}{$id} = [$k, $v]; 136 } 137 else { 138 carp "Only refs supported, ignoring non-ref item \$$k"; 139 } 140 } 141 return $s; 142 } 143 else { 144 return map { @$_ } values %{$s->{seen}}; 145 } 146} 147 148# 149# set or query the values to be dumped 150# 151sub Values { 152 my($s, $v) = @_; 153 if (defined($v) && (ref($v) eq 'ARRAY')) { 154 $s->{todump} = [@$v]; # make a copy 155 return $s; 156 } 157 else { 158 return @{$s->{todump}}; 159 } 160} 161 162# 163# set or query the names of the values to be dumped 164# 165sub Names { 166 my($s, $n) = @_; 167 if (defined($n) && (ref($n) eq 'ARRAY')) { 168 $s->{names} = [@$n]; # make a copy 169 return $s; 170 } 171 else { 172 return @{$s->{names}}; 173 } 174} 175 176sub DESTROY {} 177 178sub Dump { 179 return &Dumpxs 180 unless $Data::Dumper::Useperl || (ref($_[0]) && $_[0]->{useperl}) || 181 $Data::Dumper::Useqq || (ref($_[0]) && $_[0]->{useqq}) || 182 $Data::Dumper::Deparse || (ref($_[0]) && $_[0]->{deparse}); 183 return &Dumpperl; 184} 185 186# 187# dump the refs in the current dumper object. 188# expects same args as new() if called via package name. 189# 190sub Dumpperl { 191 my($s) = shift; 192 my(@out, $val, $name); 193 my($i) = 0; 194 local(@post); 195 init_refaddr_format(); 196 197 $s = $s->new(@_) unless ref $s; 198 199 for $val (@{$s->{todump}}) { 200 my $out = ""; 201 @post = (); 202 $name = $s->{names}[$i++]; 203 if (defined $name) { 204 if ($name =~ /^[*](.*)$/) { 205 if (defined $val) { 206 $name = (ref $val eq 'ARRAY') ? ( "\@" . $1 ) : 207 (ref $val eq 'HASH') ? ( "\%" . $1 ) : 208 (ref $val eq 'CODE') ? ( "\*" . $1 ) : 209 ( "\$" . $1 ) ; 210 } 211 else { 212 $name = "\$" . $1; 213 } 214 } 215 elsif ($name !~ /^\$/) { 216 $name = "\$" . $name; 217 } 218 } 219 else { 220 $name = "\$" . $s->{varname} . $i; 221 } 222 223 my $valstr; 224 { 225 local($s->{apad}) = $s->{apad}; 226 $s->{apad} .= ' ' x (length($name) + 3) if $s->{indent} >= 2; 227 $valstr = $s->_dump($val, $name); 228 } 229 230 $valstr = "$name = " . $valstr . ';' if @post or !$s->{terse}; 231 $out .= $s->{pad} . $valstr . $s->{sep}; 232 $out .= $s->{pad} . join(';' . $s->{sep} . $s->{pad}, @post) 233 . ';' . $s->{sep} if @post; 234 235 push @out, $out; 236 } 237 return wantarray ? @out : join('', @out); 238} 239 240# 241# twist, toil and turn; 242# and recurse, of course. 243# sometimes sordidly; 244# and curse if no recourse. 245# 246sub _dump { 247 my($s, $val, $name) = @_; 248 my($sname); 249 my($out, $realpack, $realtype, $type, $ipad, $id, $blesspad); 250 251 $type = ref $val; 252 $out = ""; 253 254 if ($type) { 255 256 # Call the freezer method if it's specified and the object has the 257 # method. Trap errors and warn() instead of die()ing, like the XS 258 # implementation. 259 my $freezer = $s->{freezer}; 260 if ($freezer and UNIVERSAL::can($val, $freezer)) { 261 eval { $val->$freezer() }; 262 warn "WARNING(Freezer method call failed): $@" if $@; 263 } 264 265 require Scalar::Util; 266 $realpack = Scalar::Util::blessed($val); 267 $realtype = $realpack ? Scalar::Util::reftype($val) : ref $val; 268 $id = format_refaddr($val); 269 270 # if it has a name, we need to either look it up, or keep a tab 271 # on it so we know when we hit it later 272 if (defined($name) and length($name)) { 273 # keep a tab on it so that we dont fall into recursive pit 274 if (exists $s->{seen}{$id}) { 275# if ($s->{expdepth} < $s->{level}) { 276 if ($s->{purity} and $s->{level} > 0) { 277 $out = ($realtype eq 'HASH') ? '{}' : 278 ($realtype eq 'ARRAY') ? '[]' : 279 'do{my $o}' ; 280 push @post, $name . " = " . $s->{seen}{$id}[0]; 281 } 282 else { 283 $out = $s->{seen}{$id}[0]; 284 if ($name =~ /^([\@\%])/) { 285 my $start = $1; 286 if ($out =~ /^\\$start/) { 287 $out = substr($out, 1); 288 } 289 else { 290 $out = $start . '{' . $out . '}'; 291 } 292 } 293 } 294 return $out; 295# } 296 } 297 else { 298 # store our name 299 $s->{seen}{$id} = [ (($name =~ /^[@%]/) ? ('\\' . $name ) : 300 ($realtype eq 'CODE' and 301 $name =~ /^[*](.*)$/) ? ('\\&' . $1 ) : 302 $name ), 303 $val ]; 304 } 305 } 306 307 if ($realpack and $realpack eq 'Regexp') { 308 $out = "$val"; 309 $out =~ s,/,\\/,g; 310 return "qr/$out/"; 311 } 312 313 # If purity is not set and maxdepth is set, then check depth: 314 # if we have reached maximum depth, return the string 315 # representation of the thing we are currently examining 316 # at this depth (i.e., 'Foo=ARRAY(0xdeadbeef)'). 317 if (!$s->{purity} 318 and $s->{maxdepth} > 0 319 and $s->{level} >= $s->{maxdepth}) 320 { 321 return qq['$val']; 322 } 323 324 # we have a blessed ref 325 if ($realpack) { 326 $out = $s->{'bless'} . '( '; 327 $blesspad = $s->{apad}; 328 $s->{apad} .= ' ' if ($s->{indent} >= 2); 329 } 330 331 $s->{level}++; 332 $ipad = $s->{xpad} x $s->{level}; 333 334 if ($realtype eq 'SCALAR' || $realtype eq 'REF') { 335 if ($realpack) { 336 $out .= 'do{\\(my $o = ' . $s->_dump($$val, "\${$name}") . ')}'; 337 } 338 else { 339 $out .= '\\' . $s->_dump($$val, "\${$name}"); 340 } 341 } 342 elsif ($realtype eq 'GLOB') { 343 $out .= '\\' . $s->_dump($$val, "*{$name}"); 344 } 345 elsif ($realtype eq 'ARRAY') { 346 my($v, $pad, $mname); 347 my($i) = 0; 348 $out .= ($name =~ /^\@/) ? '(' : '['; 349 $pad = $s->{sep} . $s->{pad} . $s->{apad}; 350 ($name =~ /^\@(.*)$/) ? ($mname = "\$" . $1) : 351 # omit -> if $foo->[0]->{bar}, but not ${$foo->[0]}->{bar} 352 ($name =~ /^\\?[\%\@\*\$][^{].*[]}]$/) ? ($mname = $name) : 353 ($mname = $name . '->'); 354 $mname .= '->' if $mname =~ /^\*.+\{[A-Z]+\}$/; 355 for $v (@$val) { 356 $sname = $mname . '[' . $i . ']'; 357 $out .= $pad . $ipad . '#' . $i if $s->{indent} >= 3; 358 $out .= $pad . $ipad . $s->_dump($v, $sname); 359 $out .= "," if $i++ < $#$val; 360 } 361 $out .= $pad . ($s->{xpad} x ($s->{level} - 1)) if $i; 362 $out .= ($name =~ /^\@/) ? ')' : ']'; 363 } 364 elsif ($realtype eq 'HASH') { 365 my($k, $v, $pad, $lpad, $mname, $pair); 366 $out .= ($name =~ /^\%/) ? '(' : '{'; 367 $pad = $s->{sep} . $s->{pad} . $s->{apad}; 368 $lpad = $s->{apad}; 369 $pair = $s->{pair}; 370 ($name =~ /^\%(.*)$/) ? ($mname = "\$" . $1) : 371 # omit -> if $foo->[0]->{bar}, but not ${$foo->[0]}->{bar} 372 ($name =~ /^\\?[\%\@\*\$][^{].*[]}]$/) ? ($mname = $name) : 373 ($mname = $name . '->'); 374 $mname .= '->' if $mname =~ /^\*.+\{[A-Z]+\}$/; 375 my ($sortkeys, $keys, $key) = ("$s->{sortkeys}"); 376 if ($sortkeys) { 377 if (ref($s->{sortkeys}) eq 'CODE') { 378 $keys = $s->{sortkeys}($val); 379 unless (ref($keys) eq 'ARRAY') { 380 carp "Sortkeys subroutine did not return ARRAYREF"; 381 $keys = []; 382 } 383 } 384 else { 385 $keys = [ sort keys %$val ]; 386 } 387 } 388 while (($k, $v) = ! $sortkeys ? (each %$val) : 389 @$keys ? ($key = shift(@$keys), $val->{$key}) : 390 () ) 391 { 392 my $nk = $s->_dump($k, ""); 393 $nk = $1 if !$s->{quotekeys} and $nk =~ /^[\"\']([A-Za-z_]\w*)[\"\']$/; 394 $sname = $mname . '{' . $nk . '}'; 395 $out .= $pad . $ipad . $nk . $pair; 396 397 # temporarily alter apad 398 $s->{apad} .= (" " x (length($nk) + 4)) if $s->{indent} >= 2; 399 $out .= $s->_dump($val->{$k}, $sname) . ","; 400 $s->{apad} = $lpad if $s->{indent} >= 2; 401 } 402 if (substr($out, -1) eq ',') { 403 chop $out; 404 $out .= $pad . ($s->{xpad} x ($s->{level} - 1)); 405 } 406 $out .= ($name =~ /^\%/) ? ')' : '}'; 407 } 408 elsif ($realtype eq 'CODE') { 409 if ($s->{deparse}) { 410 require B::Deparse; 411 my $sub = 'sub ' . (B::Deparse->new)->coderef2text($val); 412 $pad = $s->{sep} . $s->{pad} . $s->{apad} . $s->{xpad} x ($s->{level} - 1); 413 $sub =~ s/\n/$pad/gse; 414 $out .= $sub; 415 } else { 416 $out .= 'sub { "DUMMY" }'; 417 carp "Encountered CODE ref, using dummy placeholder" if $s->{purity}; 418 } 419 } 420 else { 421 croak "Can\'t handle $realtype type."; 422 } 423 424 if ($realpack) { # we have a blessed ref 425 $out .= ', \'' . $realpack . '\'' . ' )'; 426 $out .= '->' . $s->{toaster} . '()' if $s->{toaster} ne ''; 427 $s->{apad} = $blesspad; 428 } 429 $s->{level}--; 430 431 } 432 else { # simple scalar 433 434 my $ref = \$_[1]; 435 # first, catalog the scalar 436 if ($name ne '') { 437 $id = format_refaddr($ref); 438 if (exists $s->{seen}{$id}) { 439 if ($s->{seen}{$id}[2]) { 440 $out = $s->{seen}{$id}[0]; 441 #warn "[<$out]\n"; 442 return "\${$out}"; 443 } 444 } 445 else { 446 #warn "[>\\$name]\n"; 447 $s->{seen}{$id} = ["\\$name", $ref]; 448 } 449 } 450 if (ref($ref) eq 'GLOB' or "$ref" =~ /=GLOB\([^()]+\)$/) { # glob 451 my $name = substr($val, 1); 452 if ($name =~ /^[A-Za-z_][\w:]*$/) { 453 $name =~ s/^main::/::/; 454 $sname = $name; 455 } 456 else { 457 $sname = $s->_dump($name, ""); 458 $sname = '{' . $sname . '}'; 459 } 460 if ($s->{purity}) { 461 my $k; 462 local ($s->{level}) = 0; 463 for $k (qw(SCALAR ARRAY HASH)) { 464 my $gval = *$val{$k}; 465 next unless defined $gval; 466 next if $k eq "SCALAR" && ! defined $$gval; # always there 467 468 # _dump can push into @post, so we hold our place using $postlen 469 my $postlen = scalar @post; 470 $post[$postlen] = "\*$sname = "; 471 local ($s->{apad}) = " " x length($post[$postlen]) if $s->{indent} >= 2; 472 $post[$postlen] .= $s->_dump($gval, "\*$sname\{$k\}"); 473 } 474 } 475 $out .= '*' . $sname; 476 } 477 elsif (!defined($val)) { 478 $out .= "undef"; 479 } 480 elsif ($val =~ /^(?:0|-?[1-9]\d{0,8})\z/) { # safe decimal number 481 $out .= $val; 482 } 483 else { # string 484 if ($s->{useqq} or $val =~ tr/\0-\377//c) { 485 # Fall back to qq if there's unicode 486 $out .= qquote($val, $s->{useqq}); 487 } 488 else { 489 $val =~ s/([\\\'])/\\$1/g; 490 $out .= '\'' . $val . '\''; 491 } 492 } 493 } 494 if ($id) { 495 # if we made it this far, $id was added to seen list at current 496 # level, so remove it to get deep copies 497 if ($s->{deepcopy}) { 498 delete($s->{seen}{$id}); 499 } 500 elsif ($name) { 501 $s->{seen}{$id}[2] = 1; 502 } 503 } 504 return $out; 505} 506 507# 508# non-OO style of earlier version 509# 510sub Dumper { 511 return Data::Dumper->Dump([@_]); 512} 513 514# compat stub 515sub DumperX { 516 return Data::Dumper->Dumpxs([@_], []); 517} 518 519sub Dumpf { return Data::Dumper->Dump(@_) } 520 521sub Dumpp { print Data::Dumper->Dump(@_) } 522 523# 524# reset the "seen" cache 525# 526sub Reset { 527 my($s) = shift; 528 $s->{seen} = {}; 529 return $s; 530} 531 532sub Indent { 533 my($s, $v) = @_; 534 if (defined($v)) { 535 if ($v == 0) { 536 $s->{xpad} = ""; 537 $s->{sep} = ""; 538 } 539 else { 540 $s->{xpad} = " "; 541 $s->{sep} = "\n"; 542 } 543 $s->{indent} = $v; 544 return $s; 545 } 546 else { 547 return $s->{indent}; 548 } 549} 550 551sub Pair { 552 my($s, $v) = @_; 553 defined($v) ? (($s->{pair} = $v), return $s) : $s->{pair}; 554} 555 556sub Pad { 557 my($s, $v) = @_; 558 defined($v) ? (($s->{pad} = $v), return $s) : $s->{pad}; 559} 560 561sub Varname { 562 my($s, $v) = @_; 563 defined($v) ? (($s->{varname} = $v), return $s) : $s->{varname}; 564} 565 566sub Purity { 567 my($s, $v) = @_; 568 defined($v) ? (($s->{purity} = $v), return $s) : $s->{purity}; 569} 570 571sub Useqq { 572 my($s, $v) = @_; 573 defined($v) ? (($s->{useqq} = $v), return $s) : $s->{useqq}; 574} 575 576sub Terse { 577 my($s, $v) = @_; 578 defined($v) ? (($s->{terse} = $v), return $s) : $s->{terse}; 579} 580 581sub Freezer { 582 my($s, $v) = @_; 583 defined($v) ? (($s->{freezer} = $v), return $s) : $s->{freezer}; 584} 585 586sub Toaster { 587 my($s, $v) = @_; 588 defined($v) ? (($s->{toaster} = $v), return $s) : $s->{toaster}; 589} 590 591sub Deepcopy { 592 my($s, $v) = @_; 593 defined($v) ? (($s->{deepcopy} = $v), return $s) : $s->{deepcopy}; 594} 595 596sub Quotekeys { 597 my($s, $v) = @_; 598 defined($v) ? (($s->{quotekeys} = $v), return $s) : $s->{quotekeys}; 599} 600 601sub Bless { 602 my($s, $v) = @_; 603 defined($v) ? (($s->{'bless'} = $v), return $s) : $s->{'bless'}; 604} 605 606sub Maxdepth { 607 my($s, $v) = @_; 608 defined($v) ? (($s->{'maxdepth'} = $v), return $s) : $s->{'maxdepth'}; 609} 610 611sub Useperl { 612 my($s, $v) = @_; 613 defined($v) ? (($s->{'useperl'} = $v), return $s) : $s->{'useperl'}; 614} 615 616sub Sortkeys { 617 my($s, $v) = @_; 618 defined($v) ? (($s->{'sortkeys'} = $v), return $s) : $s->{'sortkeys'}; 619} 620 621sub Deparse { 622 my($s, $v) = @_; 623 defined($v) ? (($s->{'deparse'} = $v), return $s) : $s->{'deparse'}; 624} 625 626# used by qquote below 627my %esc = ( 628 "\a" => "\\a", 629 "\b" => "\\b", 630 "\t" => "\\t", 631 "\n" => "\\n", 632 "\f" => "\\f", 633 "\r" => "\\r", 634 "\e" => "\\e", 635); 636 637# put a string value in double quotes 638sub qquote { 639 local($_) = shift; 640 s/([\\\"\@\$])/\\$1/g; 641 my $bytes; { use bytes; $bytes = length } 642 s/([^\x00-\x7f])/'\x{'.sprintf("%x",ord($1)).'}'/ge if $bytes > length; 643 return qq("$_") unless 644 /[^ !"\#\$%&'()*+,\-.\/0-9:;<=>?\@A-Z[\\\]^_`a-z{|}~]/; # fast exit 645 646 my $high = shift || ""; 647 s/([\a\b\t\n\f\r\e])/$esc{$1}/g; 648 649 if (ord('^')==94) { # ascii 650 # no need for 3 digits in escape for these 651 s/([\0-\037])(?!\d)/'\\'.sprintf('%o',ord($1))/eg; 652 s/([\0-\037\177])/'\\'.sprintf('%03o',ord($1))/eg; 653 # all but last branch below not supported --BEHAVIOR SUBJECT TO CHANGE-- 654 if ($high eq "iso8859") { 655 s/([\200-\240])/'\\'.sprintf('%o',ord($1))/eg; 656 } elsif ($high eq "utf8") { 657# use utf8; 658# $str =~ s/([^\040-\176])/sprintf "\\x{%04x}", ord($1)/ge; 659 } elsif ($high eq "8bit") { 660 # leave it as it is 661 } else { 662 s/([\200-\377])/'\\'.sprintf('%03o',ord($1))/eg; 663 s/([^\040-\176])/sprintf "\\x{%04x}", ord($1)/ge; 664 } 665 } 666 else { # ebcdic 667 s{([^ !"\#\$%&'()*+,\-.\/0-9:;<=>?\@A-Z[\\\]^_`a-z{|}~])(?!\d)} 668 {my $v = ord($1); '\\'.sprintf(($v <= 037 ? '%o' : '%03o'), $v)}eg; 669 s{([^ !"\#\$%&'()*+,\-.\/0-9:;<=>?\@A-Z[\\\]^_`a-z{|}~])} 670 {'\\'.sprintf('%03o',ord($1))}eg; 671 } 672 673 return qq("$_"); 674} 675 676# helper sub to sort hash keys in Perl < 5.8.0 where we don't have 677# access to sortsv() from XS 678sub _sortkeys { [ sort keys %{$_[0]} ] } 679 6801; 681__END__ 682 683=head1 NAME 684 685Data::Dumper - stringified perl data structures, suitable for both printing and C<eval> 686 687=head1 SYNOPSIS 688 689 use Data::Dumper; 690 691 # simple procedural interface 692 print Dumper($foo, $bar); 693 694 # extended usage with names 695 print Data::Dumper->Dump([$foo, $bar], [qw(foo *ary)]); 696 697 # configuration variables 698 { 699 local $Data::Dumper::Purity = 1; 700 eval Data::Dumper->Dump([$foo, $bar], [qw(foo *ary)]); 701 } 702 703 # OO usage 704 $d = Data::Dumper->new([$foo, $bar], [qw(foo *ary)]); 705 ... 706 print $d->Dump; 707 ... 708 $d->Purity(1)->Terse(1)->Deepcopy(1); 709 eval $d->Dump; 710 711 712=head1 DESCRIPTION 713 714Given a list of scalars or reference variables, writes out their contents in 715perl syntax. The references can also be objects. The contents of each 716variable is output in a single Perl statement. Handles self-referential 717structures correctly. 718 719The return value can be C<eval>ed to get back an identical copy of the 720original reference structure. 721 722Any references that are the same as one of those passed in will be named 723C<$VAR>I<n> (where I<n> is a numeric suffix), and other duplicate references 724to substructures within C<$VAR>I<n> will be appropriately labeled using arrow 725notation. You can specify names for individual values to be dumped if you 726use the C<Dump()> method, or you can change the default C<$VAR> prefix to 727something else. See C<$Data::Dumper::Varname> and C<$Data::Dumper::Terse> 728below. 729 730The default output of self-referential structures can be C<eval>ed, but the 731nested references to C<$VAR>I<n> will be undefined, since a recursive 732structure cannot be constructed using one Perl statement. You should set the 733C<Purity> flag to 1 to get additional statements that will correctly fill in 734these references. Moreover, if C<eval>ed when strictures are in effect, 735you need to ensure that any variables it accesses are previously declared. 736 737In the extended usage form, the references to be dumped can be given 738user-specified names. If a name begins with a C<*>, the output will 739describe the dereferenced type of the supplied reference for hashes and 740arrays, and coderefs. Output of names will be avoided where possible if 741the C<Terse> flag is set. 742 743In many cases, methods that are used to set the internal state of the 744object will return the object itself, so method calls can be conveniently 745chained together. 746 747Several styles of output are possible, all controlled by setting 748the C<Indent> flag. See L<Configuration Variables or Methods> below 749for details. 750 751 752=head2 Methods 753 754=over 4 755 756=item I<PACKAGE>->new(I<ARRAYREF [>, I<ARRAYREF]>) 757 758Returns a newly created C<Data::Dumper> object. The first argument is an 759anonymous array of values to be dumped. The optional second argument is an 760anonymous array of names for the values. The names need not have a leading 761C<$> sign, and must be comprised of alphanumeric characters. You can begin 762a name with a C<*> to specify that the dereferenced type must be dumped 763instead of the reference itself, for ARRAY and HASH references. 764 765The prefix specified by C<$Data::Dumper::Varname> will be used with a 766numeric suffix if the name for a value is undefined. 767 768Data::Dumper will catalog all references encountered while dumping the 769values. Cross-references (in the form of names of substructures in perl 770syntax) will be inserted at all possible points, preserving any structural 771interdependencies in the original set of values. Structure traversal is 772depth-first, and proceeds in order from the first supplied value to 773the last. 774 775=item I<$OBJ>->Dump I<or> I<PACKAGE>->Dump(I<ARRAYREF [>, I<ARRAYREF]>) 776 777Returns the stringified form of the values stored in the object (preserving 778the order in which they were supplied to C<new>), subject to the 779configuration options below. In a list context, it returns a list 780of strings corresponding to the supplied values. 781 782The second form, for convenience, simply calls the C<new> method on its 783arguments before dumping the object immediately. 784 785=item I<$OBJ>->Seen(I<[HASHREF]>) 786 787Queries or adds to the internal table of already encountered references. 788You must use C<Reset> to explicitly clear the table if needed. Such 789references are not dumped; instead, their names are inserted wherever they 790are encountered subsequently. This is useful especially for properly 791dumping subroutine references. 792 793Expects an anonymous hash of name => value pairs. Same rules apply for names 794as in C<new>. If no argument is supplied, will return the "seen" list of 795name => value pairs, in a list context. Otherwise, returns the object 796itself. 797 798=item I<$OBJ>->Values(I<[ARRAYREF]>) 799 800Queries or replaces the internal array of values that will be dumped. 801When called without arguments, returns the values. Otherwise, returns the 802object itself. 803 804=item I<$OBJ>->Names(I<[ARRAYREF]>) 805 806Queries or replaces the internal array of user supplied names for the values 807that will be dumped. When called without arguments, returns the names. 808Otherwise, returns the object itself. 809 810=item I<$OBJ>->Reset 811 812Clears the internal table of "seen" references and returns the object 813itself. 814 815=back 816 817=head2 Functions 818 819=over 4 820 821=item Dumper(I<LIST>) 822 823Returns the stringified form of the values in the list, subject to the 824configuration options below. The values will be named C<$VAR>I<n> in the 825output, where I<n> is a numeric suffix. Will return a list of strings 826in a list context. 827 828=back 829 830=head2 Configuration Variables or Methods 831 832Several configuration variables can be used to control the kind of output 833generated when using the procedural interface. These variables are usually 834C<local>ized in a block so that other parts of the code are not affected by 835the change. 836 837These variables determine the default state of the object created by calling 838the C<new> method, but cannot be used to alter the state of the object 839thereafter. The equivalent method names should be used instead to query 840or set the internal state of the object. 841 842The method forms return the object itself when called with arguments, 843so that they can be chained together nicely. 844 845=over 4 846 847=item * 848 849$Data::Dumper::Indent I<or> I<$OBJ>->Indent(I<[NEWVAL]>) 850 851Controls the style of indentation. It can be set to 0, 1, 2 or 3. Style 0 852spews output without any newlines, indentation, or spaces between list 853items. It is the most compact format possible that can still be called 854valid perl. Style 1 outputs a readable form with newlines but no fancy 855indentation (each level in the structure is simply indented by a fixed 856amount of whitespace). Style 2 (the default) outputs a very readable form 857which takes into account the length of hash keys (so the hash value lines 858up). Style 3 is like style 2, but also annotates the elements of arrays 859with their index (but the comment is on its own line, so array output 860consumes twice the number of lines). Style 2 is the default. 861 862=item * 863 864$Data::Dumper::Purity I<or> I<$OBJ>->Purity(I<[NEWVAL]>) 865 866Controls the degree to which the output can be C<eval>ed to recreate the 867supplied reference structures. Setting it to 1 will output additional perl 868statements that will correctly recreate nested references. The default is 8690. 870 871=item * 872 873$Data::Dumper::Pad I<or> I<$OBJ>->Pad(I<[NEWVAL]>) 874 875Specifies the string that will be prefixed to every line of the output. 876Empty string by default. 877 878=item * 879 880$Data::Dumper::Varname I<or> I<$OBJ>->Varname(I<[NEWVAL]>) 881 882Contains the prefix to use for tagging variable names in the output. The 883default is "VAR". 884 885=item * 886 887$Data::Dumper::Useqq I<or> I<$OBJ>->Useqq(I<[NEWVAL]>) 888 889When set, enables the use of double quotes for representing string values. 890Whitespace other than space will be represented as C<[\n\t\r]>, "unsafe" 891characters will be backslashed, and unprintable characters will be output as 892quoted octal integers. Since setting this variable imposes a performance 893penalty, the default is 0. C<Dump()> will run slower if this flag is set, 894since the fast XSUB implementation doesn't support it yet. 895 896=item * 897 898$Data::Dumper::Terse I<or> I<$OBJ>->Terse(I<[NEWVAL]>) 899 900When set, Data::Dumper will emit single, non-self-referential values as 901atoms/terms rather than statements. This means that the C<$VAR>I<n> names 902will be avoided where possible, but be advised that such output may not 903always be parseable by C<eval>. 904 905=item * 906 907$Data::Dumper::Freezer I<or> $I<OBJ>->Freezer(I<[NEWVAL]>) 908 909Can be set to a method name, or to an empty string to disable the feature. 910Data::Dumper will invoke that method via the object before attempting to 911stringify it. This method can alter the contents of the object (if, for 912instance, it contains data allocated from C), and even rebless it in a 913different package. The client is responsible for making sure the specified 914method can be called via the object, and that the object ends up containing 915only perl data types after the method has been called. Defaults to an empty 916string. 917 918If an object does not support the method specified (determined using 919UNIVERSAL::can()) then the call will be skipped. If the method dies a 920warning will be generated. 921 922=item * 923 924$Data::Dumper::Toaster I<or> $I<OBJ>->Toaster(I<[NEWVAL]>) 925 926Can be set to a method name, or to an empty string to disable the feature. 927Data::Dumper will emit a method call for any objects that are to be dumped 928using the syntax C<bless(DATA, CLASS)-E<gt>METHOD()>. Note that this means that 929the method specified will have to perform any modifications required on the 930object (like creating new state within it, and/or reblessing it in a 931different package) and then return it. The client is responsible for making 932sure the method can be called via the object, and that it returns a valid 933object. Defaults to an empty string. 934 935=item * 936 937$Data::Dumper::Deepcopy I<or> $I<OBJ>->Deepcopy(I<[NEWVAL]>) 938 939Can be set to a boolean value to enable deep copies of structures. 940Cross-referencing will then only be done when absolutely essential 941(i.e., to break reference cycles). Default is 0. 942 943=item * 944 945$Data::Dumper::Quotekeys I<or> $I<OBJ>->Quotekeys(I<[NEWVAL]>) 946 947Can be set to a boolean value to control whether hash keys are quoted. 948A false value will avoid quoting hash keys when it looks like a simple 949string. Default is 1, which will always enclose hash keys in quotes. 950 951=item * 952 953$Data::Dumper::Bless I<or> $I<OBJ>->Bless(I<[NEWVAL]>) 954 955Can be set to a string that specifies an alternative to the C<bless> 956builtin operator used to create objects. A function with the specified 957name should exist, and should accept the same arguments as the builtin. 958Default is C<bless>. 959 960=item * 961 962$Data::Dumper::Pair I<or> $I<OBJ>->Pair(I<[NEWVAL]>) 963 964Can be set to a string that specifies the separator between hash keys 965and values. To dump nested hash, array and scalar values to JavaScript, 966use: C<$Data::Dumper::Pair = ' : ';>. Implementing C<bless> in JavaScript 967is left as an exercise for the reader. 968A function with the specified name exists, and accepts the same arguments 969as the builtin. 970 971Default is: C< =E<gt> >. 972 973=item * 974 975$Data::Dumper::Maxdepth I<or> $I<OBJ>->Maxdepth(I<[NEWVAL]>) 976 977Can be set to a positive integer that specifies the depth beyond which 978which we don't venture into a structure. Has no effect when 979C<Data::Dumper::Purity> is set. (Useful in debugger when we often don't 980want to see more than enough). Default is 0, which means there is 981no maximum depth. 982 983=item * 984 985$Data::Dumper::Useperl I<or> $I<OBJ>->Useperl(I<[NEWVAL]>) 986 987Can be set to a boolean value which controls whether the pure Perl 988implementation of C<Data::Dumper> is used. The C<Data::Dumper> module is 989a dual implementation, with almost all functionality written in both 990pure Perl and also in XS ('C'). Since the XS version is much faster, it 991will always be used if possible. This option lets you override the 992default behavior, usually for testing purposes only. Default is 0, which 993means the XS implementation will be used if possible. 994 995=item * 996 997$Data::Dumper::Sortkeys I<or> $I<OBJ>->Sortkeys(I<[NEWVAL]>) 998 999Can be set to a boolean value to control whether hash keys are dumped in 1000sorted order. A true value will cause the keys of all hashes to be 1001dumped in Perl's default sort order. Can also be set to a subroutine 1002reference which will be called for each hash that is dumped. In this 1003case C<Data::Dumper> will call the subroutine once for each hash, 1004passing it the reference of the hash. The purpose of the subroutine is 1005to return a reference to an array of the keys that will be dumped, in 1006the order that they should be dumped. Using this feature, you can 1007control both the order of the keys, and which keys are actually used. In 1008other words, this subroutine acts as a filter by which you can exclude 1009certain keys from being dumped. Default is 0, which means that hash keys 1010are not sorted. 1011 1012=item * 1013 1014$Data::Dumper::Deparse I<or> $I<OBJ>->Deparse(I<[NEWVAL]>) 1015 1016Can be set to a boolean value to control whether code references are 1017turned into perl source code. If set to a true value, C<B::Deparse> 1018will be used to get the source of the code reference. Using this option 1019will force using the Perl implementation of the dumper, since the fast 1020XSUB implementation doesn't support it. 1021 1022Caution : use this option only if you know that your coderefs will be 1023properly reconstructed by C<B::Deparse>. 1024 1025=back 1026 1027=head2 Exports 1028 1029=over 4 1030 1031=item Dumper 1032 1033=back 1034 1035=head1 EXAMPLES 1036 1037Run these code snippets to get a quick feel for the behavior of this 1038module. When you are through with these examples, you may want to 1039add or change the various configuration variables described above, 1040to see their behavior. (See the testsuite in the Data::Dumper 1041distribution for more examples.) 1042 1043 1044 use Data::Dumper; 1045 1046 package Foo; 1047 sub new {bless {'a' => 1, 'b' => sub { return "foo" }}, $_[0]}; 1048 1049 package Fuz; # a weird REF-REF-SCALAR object 1050 sub new {bless \($_ = \ 'fu\'z'), $_[0]}; 1051 1052 package main; 1053 $foo = Foo->new; 1054 $fuz = Fuz->new; 1055 $boo = [ 1, [], "abcd", \*foo, 1056 {1 => 'a', 023 => 'b', 0x45 => 'c'}, 1057 \\"p\q\'r", $foo, $fuz]; 1058 1059 ######## 1060 # simple usage 1061 ######## 1062 1063 $bar = eval(Dumper($boo)); 1064 print($@) if $@; 1065 print Dumper($boo), Dumper($bar); # pretty print (no array indices) 1066 1067 $Data::Dumper::Terse = 1; # don't output names where feasible 1068 $Data::Dumper::Indent = 0; # turn off all pretty print 1069 print Dumper($boo), "\n"; 1070 1071 $Data::Dumper::Indent = 1; # mild pretty print 1072 print Dumper($boo); 1073 1074 $Data::Dumper::Indent = 3; # pretty print with array indices 1075 print Dumper($boo); 1076 1077 $Data::Dumper::Useqq = 1; # print strings in double quotes 1078 print Dumper($boo); 1079 1080 $Data::Dumper::Pair = " : "; # specify hash key/value separator 1081 print Dumper($boo); 1082 1083 1084 ######## 1085 # recursive structures 1086 ######## 1087 1088 @c = ('c'); 1089 $c = \@c; 1090 $b = {}; 1091 $a = [1, $b, $c]; 1092 $b->{a} = $a; 1093 $b->{b} = $a->[1]; 1094 $b->{c} = $a->[2]; 1095 print Data::Dumper->Dump([$a,$b,$c], [qw(a b c)]); 1096 1097 1098 $Data::Dumper::Purity = 1; # fill in the holes for eval 1099 print Data::Dumper->Dump([$a, $b], [qw(*a b)]); # print as @a 1100 print Data::Dumper->Dump([$b, $a], [qw(*b a)]); # print as %b 1101 1102 1103 $Data::Dumper::Deepcopy = 1; # avoid cross-refs 1104 print Data::Dumper->Dump([$b, $a], [qw(*b a)]); 1105 1106 1107 $Data::Dumper::Purity = 0; # avoid cross-refs 1108 print Data::Dumper->Dump([$b, $a], [qw(*b a)]); 1109 1110 ######## 1111 # deep structures 1112 ######## 1113 1114 $a = "pearl"; 1115 $b = [ $a ]; 1116 $c = { 'b' => $b }; 1117 $d = [ $c ]; 1118 $e = { 'd' => $d }; 1119 $f = { 'e' => $e }; 1120 print Data::Dumper->Dump([$f], [qw(f)]); 1121 1122 $Data::Dumper::Maxdepth = 3; # no deeper than 3 refs down 1123 print Data::Dumper->Dump([$f], [qw(f)]); 1124 1125 1126 ######## 1127 # object-oriented usage 1128 ######## 1129 1130 $d = Data::Dumper->new([$a,$b], [qw(a b)]); 1131 $d->Seen({'*c' => $c}); # stash a ref without printing it 1132 $d->Indent(3); 1133 print $d->Dump; 1134 $d->Reset->Purity(0); # empty the seen cache 1135 print join "----\n", $d->Dump; 1136 1137 1138 ######## 1139 # persistence 1140 ######## 1141 1142 package Foo; 1143 sub new { bless { state => 'awake' }, shift } 1144 sub Freeze { 1145 my $s = shift; 1146 print STDERR "preparing to sleep\n"; 1147 $s->{state} = 'asleep'; 1148 return bless $s, 'Foo::ZZZ'; 1149 } 1150 1151 package Foo::ZZZ; 1152 sub Thaw { 1153 my $s = shift; 1154 print STDERR "waking up\n"; 1155 $s->{state} = 'awake'; 1156 return bless $s, 'Foo'; 1157 } 1158 1159 package Foo; 1160 use Data::Dumper; 1161 $a = Foo->new; 1162 $b = Data::Dumper->new([$a], ['c']); 1163 $b->Freezer('Freeze'); 1164 $b->Toaster('Thaw'); 1165 $c = $b->Dump; 1166 print $c; 1167 $d = eval $c; 1168 print Data::Dumper->Dump([$d], ['d']); 1169 1170 1171 ######## 1172 # symbol substitution (useful for recreating CODE refs) 1173 ######## 1174 1175 sub foo { print "foo speaking\n" } 1176 *other = \&foo; 1177 $bar = [ \&other ]; 1178 $d = Data::Dumper->new([\&other,$bar],['*other','bar']); 1179 $d->Seen({ '*foo' => \&foo }); 1180 print $d->Dump; 1181 1182 1183 ######## 1184 # sorting and filtering hash keys 1185 ######## 1186 1187 $Data::Dumper::Sortkeys = \&my_filter; 1188 my $foo = { map { (ord, "$_$_$_") } 'I'..'Q' }; 1189 my $bar = { %$foo }; 1190 my $baz = { reverse %$foo }; 1191 print Dumper [ $foo, $bar, $baz ]; 1192 1193 sub my_filter { 1194 my ($hash) = @_; 1195 # return an array ref containing the hash keys to dump 1196 # in the order that you want them to be dumped 1197 return [ 1198 # Sort the keys of %$foo in reverse numeric order 1199 $hash eq $foo ? (sort {$b <=> $a} keys %$hash) : 1200 # Only dump the odd number keys of %$bar 1201 $hash eq $bar ? (grep {$_ % 2} keys %$hash) : 1202 # Sort keys in default order for all other hashes 1203 (sort keys %$hash) 1204 ]; 1205 } 1206 1207=head1 BUGS 1208 1209Due to limitations of Perl subroutine call semantics, you cannot pass an 1210array or hash. Prepend it with a C<\> to pass its reference instead. This 1211will be remedied in time, now that Perl has subroutine prototypes. 1212For now, you need to use the extended usage form, and prepend the 1213name with a C<*> to output it as a hash or array. 1214 1215C<Data::Dumper> cheats with CODE references. If a code reference is 1216encountered in the structure being processed (and if you haven't set 1217the C<Deparse> flag), an anonymous subroutine that 1218contains the string '"DUMMY"' will be inserted in its place, and a warning 1219will be printed if C<Purity> is set. You can C<eval> the result, but bear 1220in mind that the anonymous sub that gets created is just a placeholder. 1221Someday, perl will have a switch to cache-on-demand the string 1222representation of a compiled piece of code, I hope. If you have prior 1223knowledge of all the code refs that your data structures are likely 1224to have, you can use the C<Seen> method to pre-seed the internal reference 1225table and make the dumped output point to them, instead. See L</EXAMPLES> 1226above. 1227 1228The C<Useqq> and C<Deparse> flags makes Dump() run slower, since the 1229XSUB implementation does not support them. 1230 1231SCALAR objects have the weirdest looking C<bless> workaround. 1232 1233Pure Perl version of C<Data::Dumper> escapes UTF-8 strings correctly 1234only in Perl 5.8.0 and later. 1235 1236=head2 NOTE 1237 1238Starting from Perl 5.8.1 different runs of Perl will have different 1239ordering of hash keys. The change was done for greater security, 1240see L<perlsec/"Algorithmic Complexity Attacks">. This means that 1241different runs of Perl will have different Data::Dumper outputs if 1242the data contains hashes. If you need to have identical Data::Dumper 1243outputs from different runs of Perl, use the environment variable 1244PERL_HASH_SEED, see L<perlrun/PERL_HASH_SEED>. Using this restores 1245the old (platform-specific) ordering: an even prettier solution might 1246be to use the C<Sortkeys> filter of Data::Dumper. 1247 1248=head1 AUTHOR 1249 1250Gurusamy Sarathy gsar@activestate.com 1251 1252Copyright (c) 1996-98 Gurusamy Sarathy. All rights reserved. 1253This program is free software; you can redistribute it and/or 1254modify it under the same terms as Perl itself. 1255 1256=head1 VERSION 1257 1258Version 2.121 (Aug 24 2003) 1259 1260=head1 SEE ALSO 1261 1262perl(1) 1263 1264=cut 1265