This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
more complete support for implicit thread/interpreter pointer,
[perl5.git] / ext / Data / Dumper / Dumper.pm
... / ...
CommitLineData
1#
2# Data/Dumper.pm
3#
4# convert perl data structures into perl syntax suitable for both printing
5# and eval
6#
7# Documentation at the __END__
8#
9
10package Data::Dumper;
11
12$VERSION = $VERSION = '2.101';
13
14#$| = 1;
15
16require 5.004;
17require Exporter;
18require DynaLoader;
19require overload;
20
21use Carp;
22
23@ISA = qw(Exporter DynaLoader);
24@EXPORT = qw(Dumper);
25@EXPORT_OK = qw(DumperX);
26
27bootstrap Data::Dumper;
28
29# module vars and their defaults
30$Indent = 2 unless defined $Indent;
31$Purity = 0 unless defined $Purity;
32$Pad = "" unless defined $Pad;
33$Varname = "VAR" unless defined $Varname;
34$Useqq = 0 unless defined $Useqq;
35$Terse = 0 unless defined $Terse;
36$Freezer = "" unless defined $Freezer;
37$Toaster = "" unless defined $Toaster;
38$Deepcopy = 0 unless defined $Deepcopy;
39$Quotekeys = 1 unless defined $Quotekeys;
40$Bless = "bless" unless defined $Bless;
41#$Expdepth = 0 unless defined $Expdepth;
42#$Maxdepth = 0 unless defined $Maxdepth;
43
44#
45# expects an arrayref of values to be dumped.
46# can optionally pass an arrayref of names for the values.
47# names must have leading $ sign stripped. begin the name with *
48# to cause output of arrays and hashes rather than refs.
49#
50sub new {
51 my($c, $v, $n) = @_;
52
53 croak "Usage: PACKAGE->new(ARRAYREF, [ARRAYREF])"
54 unless (defined($v) && (ref($v) eq 'ARRAY'));
55 $n = [] unless (defined($n) && (ref($v) eq 'ARRAY'));
56
57 my($s) = {
58 level => 0, # current recursive depth
59 indent => $Indent, # various styles of indenting
60 pad => $Pad, # all lines prefixed by this string
61 xpad => "", # padding-per-level
62 apad => "", # added padding for hash keys n such
63 sep => "", # list separator
64 seen => {}, # local (nested) refs (id => [name, val])
65 todump => $v, # values to dump []
66 names => $n, # optional names for values []
67 varname => $Varname, # prefix to use for tagging nameless ones
68 purity => $Purity, # degree to which output is evalable
69 useqq => $Useqq, # use "" for strings (backslashitis ensues)
70 terse => $Terse, # avoid name output (where feasible)
71 freezer => $Freezer, # name of Freezer method for objects
72 toaster => $Toaster, # name of method to revive objects
73 deepcopy => $Deepcopy, # dont cross-ref, except to stop recursion
74 quotekeys => $Quotekeys, # quote hash keys
75 'bless' => $Bless, # keyword to use for "bless"
76# expdepth => $Expdepth, # cutoff depth for explicit dumping
77# maxdepth => $Maxdepth, # depth beyond which we give up
78 };
79
80 if ($Indent > 0) {
81 $s->{xpad} = " ";
82 $s->{sep} = "\n";
83 }
84 return bless($s, $c);
85}
86
87#
88# add-to or query the table of already seen references
89#
90sub Seen {
91 my($s, $g) = @_;
92 if (defined($g) && (ref($g) eq 'HASH')) {
93 my($k, $v, $id);
94 while (($k, $v) = each %$g) {
95 if (defined $v and ref $v) {
96 ($id) = (overload::StrVal($v) =~ /\((.*)\)$/);
97 if ($k =~ /^[*](.*)$/) {
98 $k = (ref $v eq 'ARRAY') ? ( "\\\@" . $1 ) :
99 (ref $v eq 'HASH') ? ( "\\\%" . $1 ) :
100 (ref $v eq 'CODE') ? ( "\\\&" . $1 ) :
101 ( "\$" . $1 ) ;
102 }
103 elsif ($k !~ /^\$/) {
104 $k = "\$" . $k;
105 }
106 $s->{seen}{$id} = [$k, $v];
107 }
108 else {
109 carp "Only refs supported, ignoring non-ref item \$$k";
110 }
111 }
112 return $s;
113 }
114 else {
115 return map { @$_ } values %{$s->{seen}};
116 }
117}
118
119#
120# set or query the values to be dumped
121#
122sub Values {
123 my($s, $v) = @_;
124 if (defined($v) && (ref($v) eq 'ARRAY')) {
125 $s->{todump} = [@$v]; # make a copy
126 return $s;
127 }
128 else {
129 return @{$s->{todump}};
130 }
131}
132
133#
134# set or query the names of the values to be dumped
135#
136sub Names {
137 my($s, $n) = @_;
138 if (defined($n) && (ref($n) eq 'ARRAY')) {
139 $s->{names} = [@$n]; # make a copy
140 return $s;
141 }
142 else {
143 return @{$s->{names}};
144 }
145}
146
147sub DESTROY {}
148
149#
150# dump the refs in the current dumper object.
151# expects same args as new() if called via package name.
152#
153sub Dump {
154 my($s) = shift;
155 my(@out, $val, $name);
156 my($i) = 0;
157 local(@post);
158
159 $s = $s->new(@_) unless ref $s;
160
161 for $val (@{$s->{todump}}) {
162 my $out = "";
163 @post = ();
164 $name = $s->{names}[$i++];
165 if (defined $name) {
166 if ($name =~ /^[*](.*)$/) {
167 if (defined $val) {
168 $name = (ref $val eq 'ARRAY') ? ( "\@" . $1 ) :
169 (ref $val eq 'HASH') ? ( "\%" . $1 ) :
170 (ref $val eq 'CODE') ? ( "\*" . $1 ) :
171 ( "\$" . $1 ) ;
172 }
173 else {
174 $name = "\$" . $1;
175 }
176 }
177 elsif ($name !~ /^\$/) {
178 $name = "\$" . $name;
179 }
180 }
181 else {
182 $name = "\$" . $s->{varname} . $i;
183 }
184
185 my $valstr;
186 {
187 local($s->{apad}) = $s->{apad};
188 $s->{apad} .= ' ' x (length($name) + 3) if $s->{indent} >= 2;
189 $valstr = $s->_dump($val, $name);
190 }
191
192 $valstr = "$name = " . $valstr . ';' if @post or !$s->{terse};
193 $out .= $s->{pad} . $valstr . $s->{sep};
194 $out .= $s->{pad} . join(';' . $s->{sep} . $s->{pad}, @post)
195 . ';' . $s->{sep} if @post;
196
197 push @out, $out;
198 }
199 return wantarray ? @out : join('', @out);
200}
201
202#
203# twist, toil and turn;
204# and recurse, of course.
205#
206sub _dump {
207 my($s, $val, $name) = @_;
208 my($sname);
209 my($out, $realpack, $realtype, $type, $ipad, $id, $blesspad);
210
211 $type = ref $val;
212 $out = "";
213
214 if ($type) {
215
216 # prep it, if it looks like an object
217 if ($type =~ /[a-z_:]/) {
218 my $freezer = $s->{freezer};
219 $val->$freezer() if $freezer && UNIVERSAL::can($val, $freezer);
220 }
221
222 ($realpack, $realtype, $id) =
223 (overload::StrVal($val) =~ /^(?:(.*)\=)?([^=]*)\(([^\(]*)\)$/);
224
225 # if it has a name, we need to either look it up, or keep a tab
226 # on it so we know when we hit it later
227 if (defined($name) and length($name)) {
228 # keep a tab on it so that we dont fall into recursive pit
229 if (exists $s->{seen}{$id}) {
230# if ($s->{expdepth} < $s->{level}) {
231 if ($s->{purity} and $s->{level} > 0) {
232 $out = ($realtype eq 'HASH') ? '{}' :
233 ($realtype eq 'ARRAY') ? '[]' :
234 "''" ;
235 push @post, $name . " = " . $s->{seen}{$id}[0];
236 }
237 else {
238 $out = $s->{seen}{$id}[0];
239 if ($name =~ /^([\@\%])/) {
240 my $start = $1;
241 if ($out =~ /^\\$start/) {
242 $out = substr($out, 1);
243 }
244 else {
245 $out = $start . '{' . $out . '}';
246 }
247 }
248 }
249 return $out;
250# }
251 }
252 else {
253 # store our name
254 $s->{seen}{$id} = [ (($name =~ /^[@%]/) ? ('\\' . $name ) :
255 ($realtype eq 'CODE' and
256 $name =~ /^[*](.*)$/) ? ('\\&' . $1 ) :
257 $name ),
258 $val ];
259 }
260 }
261
262 $s->{level}++;
263 $ipad = $s->{xpad} x $s->{level};
264
265 if ($realpack) { # we have a blessed ref
266 $out = $s->{'bless'} . '( ';
267 $blesspad = $s->{apad};
268 $s->{apad} .= ' ' if ($s->{indent} >= 2);
269 }
270
271 if ($realtype eq 'SCALAR') {
272 if ($realpack) {
273 $out .= 'do{\\(my $o = ' . $s->_dump($$val, "\${$name}") . ')}';
274 }
275 else {
276 $out .= '\\' . $s->_dump($$val, "\${$name}");
277 }
278 }
279 elsif ($realtype eq 'GLOB') {
280 $out .= '\\' . $s->_dump($$val, "*{$name}");
281 }
282 elsif ($realtype eq 'ARRAY') {
283 my($v, $pad, $mname);
284 my($i) = 0;
285 $out .= ($name =~ /^\@/) ? '(' : '[';
286 $pad = $s->{sep} . $s->{pad} . $s->{apad};
287 ($name =~ /^\@(.*)$/) ? ($mname = "\$" . $1) :
288 # omit -> if $foo->[0]->{bar}, but not ${$foo->[0]}->{bar}
289 ($name =~ /^\\?[\%\@\*\$][^{].*[]}]$/) ? ($mname = $name) :
290 ($mname = $name . '->');
291 $mname .= '->' if $mname =~ /^\*.+\{[A-Z]+\}$/;
292 for $v (@$val) {
293 $sname = $mname . '[' . $i . ']';
294 $out .= $pad . $ipad . '#' . $i if $s->{indent} >= 3;
295 $out .= $pad . $ipad . $s->_dump($v, $sname);
296 $out .= "," if $i++ < $#$val;
297 }
298 $out .= $pad . ($s->{xpad} x ($s->{level} - 1)) if $i;
299 $out .= ($name =~ /^\@/) ? ')' : ']';
300 }
301 elsif ($realtype eq 'HASH') {
302 my($k, $v, $pad, $lpad, $mname);
303 $out .= ($name =~ /^\%/) ? '(' : '{';
304 $pad = $s->{sep} . $s->{pad} . $s->{apad};
305 $lpad = $s->{apad};
306 ($name =~ /^\%(.*)$/) ? ($mname = "\$" . $1) :
307 # omit -> if $foo->[0]->{bar}, but not ${$foo->[0]}->{bar}
308 ($name =~ /^\\?[\%\@\*\$][^{].*[]}]$/) ? ($mname = $name) :
309 ($mname = $name . '->');
310 $mname .= '->' if $mname =~ /^\*.+\{[A-Z]+\}$/;
311 while (($k, $v) = each %$val) {
312 my $nk = $s->_dump($k, "");
313 $nk = $1 if !$s->{quotekeys} and $nk =~ /^[\"\']([A-Za-z_]\w*)[\"\']$/;
314 $sname = $mname . '{' . $nk . '}';
315 $out .= $pad . $ipad . $nk . " => ";
316
317 # temporarily alter apad
318 $s->{apad} .= (" " x (length($nk) + 4)) if $s->{indent} >= 2;
319 $out .= $s->_dump($val->{$k}, $sname) . ",";
320 $s->{apad} = $lpad if $s->{indent} >= 2;
321 }
322 if (substr($out, -1) eq ',') {
323 chop $out;
324 $out .= $pad . ($s->{xpad} x ($s->{level} - 1));
325 }
326 $out .= ($name =~ /^\%/) ? ')' : '}';
327 }
328 elsif ($realtype eq 'CODE') {
329 $out .= 'sub { "DUMMY" }';
330 carp "Encountered CODE ref, using dummy placeholder" if $s->{purity};
331 }
332 else {
333 croak "Can\'t handle $realtype type.";
334 }
335
336 if ($realpack) { # we have a blessed ref
337 $out .= ', \'' . $realpack . '\'' . ' )';
338 $out .= '->' . $s->{toaster} . '()' if $s->{toaster} ne '';
339 $s->{apad} = $blesspad;
340 }
341 $s->{level}--;
342
343 }
344 else { # simple scalar
345
346 my $ref = \$_[1];
347 # first, catalog the scalar
348 if ($name ne '') {
349 ($id) = ("$ref" =~ /\(([^\(]*)\)$/);
350 if (exists $s->{seen}{$id}) {
351 if ($s->{seen}{$id}[2]) {
352 $out = $s->{seen}{$id}[0];
353 #warn "[<$out]\n";
354 return "\${$out}";
355 }
356 }
357 else {
358 #warn "[>\\$name]\n";
359 $s->{seen}{$id} = ["\\$name", $ref];
360 }
361 }
362 if (ref($ref) eq 'GLOB' or "$ref" =~ /=GLOB\([^()]+\)$/) { # glob
363 my $name = substr($val, 1);
364 if ($name =~ /^[A-Za-z_][\w:]*$/) {
365 $name =~ s/^main::/::/;
366 $sname = $name;
367 }
368 else {
369 $sname = $s->_dump($name, "");
370 $sname = '{' . $sname . '}';
371 }
372 if ($s->{purity}) {
373 my $k;
374 local ($s->{level}) = 0;
375 for $k (qw(SCALAR ARRAY HASH)) {
376 my $gval = *$val{$k};
377 next unless defined $gval;
378 next if $k eq "SCALAR" && ! defined $$gval; # always there
379
380 # _dump can push into @post, so we hold our place using $postlen
381 my $postlen = scalar @post;
382 $post[$postlen] = "\*$sname = ";
383 local ($s->{apad}) = " " x length($post[$postlen]) if $s->{indent} >= 2;
384 $post[$postlen] .= $s->_dump($gval, "\*$sname\{$k\}");
385 }
386 }
387 $out .= '*' . $sname;
388 }
389 elsif (!defined($val)) {
390 $out .= "undef";
391 }
392 elsif ($val =~ /^-?[1-9]\d{0,8}$/) { # safe decimal number
393 $out .= $val;
394 }
395 else { # string
396 if ($s->{useqq}) {
397 $out .= qquote($val, $s->{useqq});
398 }
399 else {
400 $val =~ s/([\\\'])/\\$1/g;
401 $out .= '\'' . $val . '\'';
402 }
403 }
404 }
405 if ($id) {
406 # if we made it this far, $id was added to seen list at current
407 # level, so remove it to get deep copies
408 if ($s->{deepcopy}) {
409 delete($s->{seen}{$id});
410 }
411 elsif ($name) {
412 $s->{seen}{$id}[2] = 1;
413 }
414 }
415 return $out;
416}
417
418#
419# non-OO style of earlier version
420#
421sub Dumper {
422 return Data::Dumper->Dump([@_]);
423}
424
425#
426# same, only calls the XS version
427#
428sub DumperX {
429 return Data::Dumper->Dumpxs([@_], []);
430}
431
432sub Dumpf { return Data::Dumper->Dump(@_) }
433
434sub Dumpp { print Data::Dumper->Dump(@_) }
435
436#
437# reset the "seen" cache
438#
439sub Reset {
440 my($s) = shift;
441 $s->{seen} = {};
442 return $s;
443}
444
445sub Indent {
446 my($s, $v) = @_;
447 if (defined($v)) {
448 if ($v == 0) {
449 $s->{xpad} = "";
450 $s->{sep} = "";
451 }
452 else {
453 $s->{xpad} = " ";
454 $s->{sep} = "\n";
455 }
456 $s->{indent} = $v;
457 return $s;
458 }
459 else {
460 return $s->{indent};
461 }
462}
463
464sub Pad {
465 my($s, $v) = @_;
466 defined($v) ? (($s->{pad} = $v), return $s) : $s->{pad};
467}
468
469sub Varname {
470 my($s, $v) = @_;
471 defined($v) ? (($s->{varname} = $v), return $s) : $s->{varname};
472}
473
474sub Purity {
475 my($s, $v) = @_;
476 defined($v) ? (($s->{purity} = $v), return $s) : $s->{purity};
477}
478
479sub Useqq {
480 my($s, $v) = @_;
481 defined($v) ? (($s->{useqq} = $v), return $s) : $s->{useqq};
482}
483
484sub Terse {
485 my($s, $v) = @_;
486 defined($v) ? (($s->{terse} = $v), return $s) : $s->{terse};
487}
488
489sub Freezer {
490 my($s, $v) = @_;
491 defined($v) ? (($s->{freezer} = $v), return $s) : $s->{freezer};
492}
493
494sub Toaster {
495 my($s, $v) = @_;
496 defined($v) ? (($s->{toaster} = $v), return $s) : $s->{toaster};
497}
498
499sub Deepcopy {
500 my($s, $v) = @_;
501 defined($v) ? (($s->{deepcopy} = $v), return $s) : $s->{deepcopy};
502}
503
504sub Quotekeys {
505 my($s, $v) = @_;
506 defined($v) ? (($s->{quotekeys} = $v), return $s) : $s->{quotekeys};
507}
508
509sub Bless {
510 my($s, $v) = @_;
511 defined($v) ? (($s->{'bless'} = $v), return $s) : $s->{'bless'};
512}
513
514# used by qquote below
515my %esc = (
516 "\a" => "\\a",
517 "\b" => "\\b",
518 "\t" => "\\t",
519 "\n" => "\\n",
520 "\f" => "\\f",
521 "\r" => "\\r",
522 "\e" => "\\e",
523);
524
525# put a string value in double quotes
526sub qquote {
527 local($_) = shift;
528 s/([\\\"\@\$])/\\$1/g;
529 return qq("$_") unless /[^\040-\176]/; # fast exit
530
531 my $high = shift || "";
532 s/([\a\b\t\n\f\r\e])/$esc{$1}/g;
533
534 # no need for 3 digits in escape for these
535 s/([\0-\037])(?!\d)/'\\'.sprintf('%o',ord($1))/eg;
536
537 s/([\0-\037\177])/'\\'.sprintf('%03o',ord($1))/eg;
538 if ($high eq "iso8859") {
539 s/([\200-\240])/'\\'.sprintf('%o',ord($1))/eg;
540 } elsif ($high eq "utf8") {
541# use utf8;
542# $str =~ s/([^\040-\176])/sprintf "\\x{%04x}", ord($1)/ge;
543 } elsif ($high eq "8bit") {
544 # leave it as it is
545 } else {
546 s/([\0-\037\177-\377])/'\\'.sprintf('%03o',ord($1))/eg;
547 }
548 return qq("$_");
549}
550
5511;
552__END__
553
554=head1 NAME
555
556Data::Dumper - stringified perl data structures, suitable for both printing and C<eval>
557
558
559=head1 SYNOPSIS
560
561 use Data::Dumper;
562
563 # simple procedural interface
564 print Dumper($foo, $bar);
565
566 # extended usage with names
567 print Data::Dumper->Dump([$foo, $bar], [qw(foo *ary)]);
568
569 # configuration variables
570 {
571 local $Data::Dump::Purity = 1;
572 eval Data::Dumper->Dump([$foo, $bar], [qw(foo *ary)]);
573 }
574
575 # OO usage
576 $d = Data::Dumper->new([$foo, $bar], [qw(foo *ary)]);
577 ...
578 print $d->Dump;
579 ...
580 $d->Purity(1)->Terse(1)->Deepcopy(1);
581 eval $d->Dump;
582
583
584=head1 DESCRIPTION
585
586Given a list of scalars or reference variables, writes out their contents in
587perl syntax. The references can also be objects. The contents of each
588variable is output in a single Perl statement. Handles self-referential
589structures correctly.
590
591The return value can be C<eval>ed to get back an identical copy of the
592original reference structure.
593
594Any references that are the same as one of those passed in will be named
595C<$VAR>I<n> (where I<n> is a numeric suffix), and other duplicate references
596to substructures within C<$VAR>I<n> will be appropriately labeled using arrow
597notation. You can specify names for individual values to be dumped if you
598use the C<Dump()> method, or you can change the default C<$VAR> prefix to
599something else. See C<$Data::Dumper::Varname> and C<$Data::Dumper::Terse>
600below.
601
602The default output of self-referential structures can be C<eval>ed, but the
603nested references to C<$VAR>I<n> will be undefined, since a recursive
604structure cannot be constructed using one Perl statement. You should set the
605C<Purity> flag to 1 to get additional statements that will correctly fill in
606these references.
607
608In the extended usage form, the references to be dumped can be given
609user-specified names. If a name begins with a C<*>, the output will
610describe the dereferenced type of the supplied reference for hashes and
611arrays, and coderefs. Output of names will be avoided where possible if
612the C<Terse> flag is set.
613
614In many cases, methods that are used to set the internal state of the
615object will return the object itself, so method calls can be conveniently
616chained together.
617
618Several styles of output are possible, all controlled by setting
619the C<Indent> flag. See L<Configuration Variables or Methods> below
620for details.
621
622
623=head2 Methods
624
625=over 4
626
627=item I<PACKAGE>->new(I<ARRAYREF [>, I<ARRAYREF]>)
628
629Returns a newly created C<Data::Dumper> object. The first argument is an
630anonymous array of values to be dumped. The optional second argument is an
631anonymous array of names for the values. The names need not have a leading
632C<$> sign, and must be comprised of alphanumeric characters. You can begin
633a name with a C<*> to specify that the dereferenced type must be dumped
634instead of the reference itself, for ARRAY and HASH references.
635
636The prefix specified by C<$Data::Dumper::Varname> will be used with a
637numeric suffix if the name for a value is undefined.
638
639Data::Dumper will catalog all references encountered while dumping the
640values. Cross-references (in the form of names of substructures in perl
641syntax) will be inserted at all possible points, preserving any structural
642interdependencies in the original set of values. Structure traversal is
643depth-first, and proceeds in order from the first supplied value to
644the last.
645
646=item I<$OBJ>->Dump I<or> I<PACKAGE>->Dump(I<ARRAYREF [>, I<ARRAYREF]>)
647
648Returns the stringified form of the values stored in the object (preserving
649the order in which they were supplied to C<new>), subject to the
650configuration options below. In an array context, it returns a list
651of strings corresponding to the supplied values.
652
653The second form, for convenience, simply calls the C<new> method on its
654arguments before dumping the object immediately.
655
656=item I<$OBJ>->Dumpxs I<or> I<PACKAGE>->Dumpxs(I<ARRAYREF [>, I<ARRAYREF]>)
657
658This method is available if you were able to compile and install the XSUB
659extension to C<Data::Dumper>. It is exactly identical to the C<Dump> method
660above, only about 4 to 5 times faster, since it is written entirely in C.
661
662=item I<$OBJ>->Seen(I<[HASHREF]>)
663
664Queries or adds to the internal table of already encountered references.
665You must use C<Reset> to explicitly clear the table if needed. Such
666references are not dumped; instead, their names are inserted wherever they
667are encountered subsequently. This is useful especially for properly
668dumping subroutine references.
669
670Expects a anonymous hash of name => value pairs. Same rules apply for names
671as in C<new>. If no argument is supplied, will return the "seen" list of
672name => value pairs, in an array context. Otherwise, returns the object
673itself.
674
675=item I<$OBJ>->Values(I<[ARRAYREF]>)
676
677Queries or replaces the internal array of values that will be dumped.
678When called without arguments, returns the values. Otherwise, returns the
679object itself.
680
681=item I<$OBJ>->Names(I<[ARRAYREF]>)
682
683Queries or replaces the internal array of user supplied names for the values
684that will be dumped. When called without arguments, returns the names.
685Otherwise, returns the object itself.
686
687=item I<$OBJ>->Reset
688
689Clears the internal table of "seen" references and returns the object
690itself.
691
692=back
693
694=head2 Functions
695
696=over 4
697
698=item Dumper(I<LIST>)
699
700Returns the stringified form of the values in the list, subject to the
701configuration options below. The values will be named C<$VAR>I<n> in the
702output, where I<n> is a numeric suffix. Will return a list of strings
703in an array context.
704
705=item DumperX(I<LIST>)
706
707Identical to the C<Dumper()> function above, but this calls the XSUB
708implementation. Only available if you were able to compile and install
709the XSUB extensions in C<Data::Dumper>.
710
711=back
712
713=head2 Configuration Variables or Methods
714
715Several configuration variables can be used to control the kind of output
716generated when using the procedural interface. These variables are usually
717C<local>ized in a block so that other parts of the code are not affected by
718the change.
719
720These variables determine the default state of the object created by calling
721the C<new> method, but cannot be used to alter the state of the object
722thereafter. The equivalent method names should be used instead to query
723or set the internal state of the object.
724
725The method forms return the object itself when called with arguments,
726so that they can be chained together nicely.
727
728=over 4
729
730=item $Data::Dumper::Indent I<or> I<$OBJ>->Indent(I<[NEWVAL]>)
731
732Controls the style of indentation. It can be set to 0, 1, 2 or 3. Style 0
733spews output without any newlines, indentation, or spaces between list
734items. It is the most compact format possible that can still be called
735valid perl. Style 1 outputs a readable form with newlines but no fancy
736indentation (each level in the structure is simply indented by a fixed
737amount of whitespace). Style 2 (the default) outputs a very readable form
738which takes into account the length of hash keys (so the hash value lines
739up). Style 3 is like style 2, but also annotates the elements of arrays
740with their index (but the comment is on its own line, so array output
741consumes twice the number of lines). Style 2 is the default.
742
743=item $Data::Dumper::Purity I<or> I<$OBJ>->Purity(I<[NEWVAL]>)
744
745Controls the degree to which the output can be C<eval>ed to recreate the
746supplied reference structures. Setting it to 1 will output additional perl
747statements that will correctly recreate nested references. The default is
7480.
749
750=item $Data::Dumper::Pad I<or> I<$OBJ>->Pad(I<[NEWVAL]>)
751
752Specifies the string that will be prefixed to every line of the output.
753Empty string by default.
754
755=item $Data::Dumper::Varname I<or> I<$OBJ>->Varname(I<[NEWVAL]>)
756
757Contains the prefix to use for tagging variable names in the output. The
758default is "VAR".
759
760=item $Data::Dumper::Useqq I<or> I<$OBJ>->Useqq(I<[NEWVAL]>)
761
762When set, enables the use of double quotes for representing string values.
763Whitespace other than space will be represented as C<[\n\t\r]>, "unsafe"
764characters will be backslashed, and unprintable characters will be output as
765quoted octal integers. Since setting this variable imposes a performance
766penalty, the default is 0. The C<Dumpxs()> method does not honor this
767flag yet.
768
769=item $Data::Dumper::Terse I<or> I<$OBJ>->Terse(I<[NEWVAL]>)
770
771When set, Data::Dumper will emit single, non-self-referential values as
772atoms/terms rather than statements. This means that the C<$VAR>I<n> names
773will be avoided where possible, but be advised that such output may not
774always be parseable by C<eval>.
775
776=item $Data::Dumper::Freezer I<or> $I<OBJ>->Freezer(I<[NEWVAL]>)
777
778Can be set to a method name, or to an empty string to disable the feature.
779Data::Dumper will invoke that method via the object before attempting to
780stringify it. This method can alter the contents of the object (if, for
781instance, it contains data allocated from C), and even rebless it in a
782different package. The client is responsible for making sure the specified
783method can be called via the object, and that the object ends up containing
784only perl data types after the method has been called. Defaults to an empty
785string.
786
787=item $Data::Dumper::Toaster I<or> $I<OBJ>->Toaster(I<[NEWVAL]>)
788
789Can be set to a method name, or to an empty string to disable the feature.
790Data::Dumper will emit a method call for any objects that are to be dumped
791using the syntax C<bless(DATA, CLASS)->METHOD()>. Note that this means that
792the method specified will have to perform any modifications required on the
793object (like creating new state within it, and/or reblessing it in a
794different package) and then return it. The client is responsible for making
795sure the method can be called via the object, and that it returns a valid
796object. Defaults to an empty string.
797
798=item $Data::Dumper::Deepcopy I<or> $I<OBJ>->Deepcopy(I<[NEWVAL]>)
799
800Can be set to a boolean value to enable deep copies of structures.
801Cross-referencing will then only be done when absolutely essential
802(i.e., to break reference cycles). Default is 0.
803
804=item $Data::Dumper::Quotekeys I<or> $I<OBJ>->Quotekeys(I<[NEWVAL]>)
805
806Can be set to a boolean value to control whether hash keys are quoted.
807A false value will avoid quoting hash keys when it looks like a simple
808string. Default is 1, which will always enclose hash keys in quotes.
809
810=item $Data::Dumper::Bless I<or> $I<OBJ>->Bless(I<[NEWVAL]>)
811
812Can be set to a string that specifies an alternative to the C<bless>
813builtin operator used to create objects. A function with the specified
814name should exist, and should accept the same arguments as the builtin.
815Default is C<bless>.
816
817=back
818
819=head2 Exports
820
821=over 4
822
823=item Dumper
824
825=back
826
827=head1 EXAMPLES
828
829Run these code snippets to get a quick feel for the behavior of this
830module. When you are through with these examples, you may want to
831add or change the various configuration variables described above,
832to see their behavior. (See the testsuite in the Data::Dumper
833distribution for more examples.)
834
835
836 use Data::Dumper;
837
838 package Foo;
839 sub new {bless {'a' => 1, 'b' => sub { return "foo" }}, $_[0]};
840
841 package Fuz; # a weird REF-REF-SCALAR object
842 sub new {bless \($_ = \ 'fu\'z'), $_[0]};
843
844 package main;
845 $foo = Foo->new;
846 $fuz = Fuz->new;
847 $boo = [ 1, [], "abcd", \*foo,
848 {1 => 'a', 023 => 'b', 0x45 => 'c'},
849 \\"p\q\'r", $foo, $fuz];
850
851 ########
852 # simple usage
853 ########
854
855 $bar = eval(Dumper($boo));
856 print($@) if $@;
857 print Dumper($boo), Dumper($bar); # pretty print (no array indices)
858
859 $Data::Dumper::Terse = 1; # don't output names where feasible
860 $Data::Dumper::Indent = 0; # turn off all pretty print
861 print Dumper($boo), "\n";
862
863 $Data::Dumper::Indent = 1; # mild pretty print
864 print Dumper($boo);
865
866 $Data::Dumper::Indent = 3; # pretty print with array indices
867 print Dumper($boo);
868
869 $Data::Dumper::Useqq = 1; # print strings in double quotes
870 print Dumper($boo);
871
872
873 ########
874 # recursive structures
875 ########
876
877 @c = ('c');
878 $c = \@c;
879 $b = {};
880 $a = [1, $b, $c];
881 $b->{a} = $a;
882 $b->{b} = $a->[1];
883 $b->{c} = $a->[2];
884 print Data::Dumper->Dump([$a,$b,$c], [qw(a b c)]);
885
886
887 $Data::Dumper::Purity = 1; # fill in the holes for eval
888 print Data::Dumper->Dump([$a, $b], [qw(*a b)]); # print as @a
889 print Data::Dumper->Dump([$b, $a], [qw(*b a)]); # print as %b
890
891
892 $Data::Dumper::Deepcopy = 1; # avoid cross-refs
893 print Data::Dumper->Dump([$b, $a], [qw(*b a)]);
894
895
896 $Data::Dumper::Purity = 0; # avoid cross-refs
897 print Data::Dumper->Dump([$b, $a], [qw(*b a)]);
898
899
900 ########
901 # object-oriented usage
902 ########
903
904 $d = Data::Dumper->new([$a,$b], [qw(a b)]);
905 $d->Seen({'*c' => $c}); # stash a ref without printing it
906 $d->Indent(3);
907 print $d->Dump;
908 $d->Reset->Purity(0); # empty the seen cache
909 print join "----\n", $d->Dump;
910
911
912 ########
913 # persistence
914 ########
915
916 package Foo;
917 sub new { bless { state => 'awake' }, shift }
918 sub Freeze {
919 my $s = shift;
920 print STDERR "preparing to sleep\n";
921 $s->{state} = 'asleep';
922 return bless $s, 'Foo::ZZZ';
923 }
924
925 package Foo::ZZZ;
926 sub Thaw {
927 my $s = shift;
928 print STDERR "waking up\n";
929 $s->{state} = 'awake';
930 return bless $s, 'Foo';
931 }
932
933 package Foo;
934 use Data::Dumper;
935 $a = Foo->new;
936 $b = Data::Dumper->new([$a], ['c']);
937 $b->Freezer('Freeze');
938 $b->Toaster('Thaw');
939 $c = $b->Dump;
940 print $c;
941 $d = eval $c;
942 print Data::Dumper->Dump([$d], ['d']);
943
944
945 ########
946 # symbol substitution (useful for recreating CODE refs)
947 ########
948
949 sub foo { print "foo speaking\n" }
950 *other = \&foo;
951 $bar = [ \&other ];
952 $d = Data::Dumper->new([\&other,$bar],['*other','bar']);
953 $d->Seen({ '*foo' => \&foo });
954 print $d->Dump;
955
956
957=head1 BUGS
958
959Due to limitations of Perl subroutine call semantics, you cannot pass an
960array or hash. Prepend it with a C<\> to pass its reference instead. This
961will be remedied in time, with the arrival of prototypes in later versions
962of Perl. For now, you need to use the extended usage form, and prepend the
963name with a C<*> to output it as a hash or array.
964
965C<Data::Dumper> cheats with CODE references. If a code reference is
966encountered in the structure being processed, an anonymous subroutine that
967contains the string '"DUMMY"' will be inserted in its place, and a warning
968will be printed if C<Purity> is set. You can C<eval> the result, but bear
969in mind that the anonymous sub that gets created is just a placeholder.
970Someday, perl will have a switch to cache-on-demand the string
971representation of a compiled piece of code, I hope. If you have prior
972knowledge of all the code refs that your data structures are likely
973to have, you can use the C<Seen> method to pre-seed the internal reference
974table and make the dumped output point to them, instead. See L<EXAMPLES>
975above.
976
977The C<Useqq> flag is not honored by C<Dumpxs()> (it always outputs
978strings in single quotes).
979
980SCALAR objects have the weirdest looking C<bless> workaround.
981
982
983=head1 AUTHOR
984
985Gurusamy Sarathy gsar@umich.edu
986
987Copyright (c) 1996-98 Gurusamy Sarathy. All rights reserved.
988This program is free software; you can redistribute it and/or
989modify it under the same terms as Perl itself.
990
991
992=head1 VERSION
993
994Version 2.10 (31 Oct 1998)
995
996=head1 SEE ALSO
997
998perl(1)
999
1000=cut