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