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