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