Data::Dumper update
[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
7820172a 12$VERSION = $VERSION = '2.10';
823edd99 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
823edd99 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};
7820172a 219 $val->$freezer() if $freezer && UNIVERSAL::can($val, $freezer);
823edd99 220 }
221
222 ($realpack, $realtype, $id) =
223 (overload::StrVal($val) =~ /^(?:(.*)\=)?([^=]*)\(([^\(]*)\)$/);
224
7820172a 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];
823edd99 236 }
237 else {
7820172a 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 ];
823edd99 259 }
823edd99 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) {
7820172a 273 $out .= 'do{\\(my $o = ' . $s->_dump($$val, "\${$name}") . ')}';
823edd99 274 }
275 else {
7820172a 276 $out .= '\\' . $s->_dump($$val, "\${$name}");
823edd99 277 }
278 }
279 elsif ($realtype eq 'GLOB') {
7820172a 280 $out .= '\\' . $s->_dump($$val, "*{$name}");
823edd99 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) :
7820172a 288 # omit -> if $foo->[0]->{bar}, but not ${$foo->[0]}->{bar}
289 ($name =~ /^\\?[\%\@\*\$][^{].*[]}]$/) ? ($mname = $name) :
290 ($mname = $name . '->');
823edd99 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};
7820172a 306 ($name =~ /^\%(.*)$/) ? ($mname = "\$" . $1) :
307 # omit -> if $foo->[0]->{bar}, but not ${$foo->[0]}->{bar}
308 ($name =~ /^\\?[\%\@\*\$][^{].*[]}]$/) ? ($mname = $name) :
309 ($mname = $name . '->');
823edd99 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 .= '"DUMMY"';
330 $out = 'sub { ' . $out . ' }';
331 carp "Encountered CODE ref, using dummy placeholder" if $s->{purity};
332 }
333 else {
334 croak "Can\'t handle $realtype type.";
335 }
336
337 if ($realpack) { # we have a blessed ref
338 $out .= ', \'' . $realpack . '\'' . ' )';
339 $out .= '->' . $s->{toaster} . '()' if $s->{toaster} ne '';
340 $s->{apad} = $blesspad;
341 }
342 $s->{level}--;
343
344 }
345 else { # simple scalar
346
347 my $ref = \$_[1];
348 # first, catalog the scalar
349 if ($name ne '') {
350 ($id) = ("$ref" =~ /\(([^\(]*)\)$/);
351 if (exists $s->{seen}{$id}) {
7820172a 352 if ($s->{seen}{$id}[2]) {
353 $out = $s->{seen}{$id}[0];
354 #warn "[<$out]\n";
355 return "\${$out}";
356 }
823edd99 357 }
358 else {
7820172a 359 #warn "[>\\$name]\n";
360 $s->{seen}{$id} = ["\\$name", $ref];
823edd99 361 }
362 }
363 if (ref($ref) eq 'GLOB' or "$ref" =~ /=GLOB\([^()]+\)$/) { # glob
364 my $name = substr($val, 1);
365 if ($name =~ /^[A-Za-z_][\w:]*$/) {
366 $name =~ s/^main::/::/;
367 $sname = $name;
368 }
369 else {
370 $sname = $s->_dump($name, "");
371 $sname = '{' . $sname . '}';
372 }
373 if ($s->{purity}) {
374 my $k;
375 local ($s->{level}) = 0;
376 for $k (qw(SCALAR ARRAY HASH)) {
7820172a 377 my $gval = *$val{$k};
378 next unless defined $gval;
379 next if $k eq "SCALAR" && ! defined $$gval; # always there
380
823edd99 381 # _dump can push into @post, so we hold our place using $postlen
382 my $postlen = scalar @post;
383 $post[$postlen] = "\*$sname = ";
384 local ($s->{apad}) = " " x length($post[$postlen]) if $s->{indent} >= 2;
7820172a 385 $post[$postlen] .= $s->_dump($gval, "\*$sname\{$k\}");
823edd99 386 }
387 }
388 $out .= '*' . $sname;
389 }
7820172a 390 elsif (!defined($val)) {
391 $out .= "undef";
392 }
823edd99 393 elsif ($val =~ /^-?[1-9]\d{0,8}$/) { # safe decimal number
394 $out .= $val;
395 }
396 else { # string
397 if ($s->{useqq}) {
7820172a 398 $out .= qquote($val, $s->{useqq});
823edd99 399 }
400 else {
401 $val =~ s/([\\\'])/\\$1/g;
402 $out .= '\'' . $val . '\'';
403 }
404 }
405 }
7820172a 406 if ($id) {
407 # if we made it this far, $id was added to seen list at current
408 # level, so remove it to get deep copies
409 if ($s->{deepcopy}) {
410 delete($s->{seen}{$id});
411 }
412 elsif ($name) {
413 $s->{seen}{$id}[2] = 1;
414 }
415 }
823edd99 416 return $out;
417}
418
419#
420# non-OO style of earlier version
421#
422sub Dumper {
423 return Data::Dumper->Dump([@_]);
424}
425
426#
427# same, only calls the XS version
428#
429sub DumperX {
430 return Data::Dumper->Dumpxs([@_], []);
431}
432
433sub Dumpf { return Data::Dumper->Dump(@_) }
434
435sub Dumpp { print Data::Dumper->Dump(@_) }
436
437#
438# reset the "seen" cache
439#
440sub Reset {
441 my($s) = shift;
442 $s->{seen} = {};
443 return $s;
444}
445
446sub Indent {
447 my($s, $v) = @_;
448 if (defined($v)) {
449 if ($v == 0) {
450 $s->{xpad} = "";
451 $s->{sep} = "";
452 }
453 else {
454 $s->{xpad} = " ";
455 $s->{sep} = "\n";
456 }
457 $s->{indent} = $v;
458 return $s;
459 }
460 else {
461 return $s->{indent};
462 }
463}
464
465sub Pad {
466 my($s, $v) = @_;
467 defined($v) ? (($s->{pad} = $v), return $s) : $s->{pad};
468}
469
470sub Varname {
471 my($s, $v) = @_;
472 defined($v) ? (($s->{varname} = $v), return $s) : $s->{varname};
473}
474
475sub Purity {
476 my($s, $v) = @_;
477 defined($v) ? (($s->{purity} = $v), return $s) : $s->{purity};
478}
479
480sub Useqq {
481 my($s, $v) = @_;
482 defined($v) ? (($s->{useqq} = $v), return $s) : $s->{useqq};
483}
484
485sub Terse {
486 my($s, $v) = @_;
487 defined($v) ? (($s->{terse} = $v), return $s) : $s->{terse};
488}
489
490sub Freezer {
491 my($s, $v) = @_;
492 defined($v) ? (($s->{freezer} = $v), return $s) : $s->{freezer};
493}
494
495sub Toaster {
496 my($s, $v) = @_;
497 defined($v) ? (($s->{toaster} = $v), return $s) : $s->{toaster};
498}
499
500sub Deepcopy {
501 my($s, $v) = @_;
502 defined($v) ? (($s->{deepcopy} = $v), return $s) : $s->{deepcopy};
503}
504
505sub Quotekeys {
506 my($s, $v) = @_;
507 defined($v) ? (($s->{quotekeys} = $v), return $s) : $s->{quotekeys};
508}
509
510sub Bless {
511 my($s, $v) = @_;
512 defined($v) ? (($s->{'bless'} = $v), return $s) : $s->{'bless'};
513}
514
7820172a 515# used by qquote below
516my %esc = (
517 "\a" => "\\a",
518 "\b" => "\\b",
519 "\t" => "\\t",
520 "\n" => "\\n",
521 "\f" => "\\f",
522 "\r" => "\\r",
523 "\e" => "\\e",
524);
525
823edd99 526# put a string value in double quotes
527sub qquote {
528 local($_) = shift;
7820172a 529 s/([\\\"\@\$])/\\$1/g;
530 return qq("$_") unless /[^\040-\176]/; # fast exit
531
532 my $high = shift || "";
533 s/([\a\b\t\n\f\r\e])/$esc{$1}/g;
534
535 # no need for 3 digits in escape for these
536 s/([\0-\037])(?!\d)/'\\'.sprintf('%o',ord($1))/eg;
537
538 s/([\0-\037\177])/'\\'.sprintf('%03o',ord($1))/eg;
539 if ($high eq "iso8859") {
540 s/([\200-\240])/'\\'.sprintf('%o',ord($1))/eg;
541 } elsif ($high eq "utf8") {
542# use utf8;
543# $str =~ s/([^\040-\176])/sprintf "\\x{%04x}", ord($1)/ge;
544 } elsif ($high eq "8bit") {
545 # leave it as it is
546 } else {
547 s/([\0-\037\177-\377])/'\\'.sprintf('%03o',ord($1))/eg;
548 }
549 return qq("$_");
823edd99 550}
551
5521;
553__END__
554
555=head1 NAME
556
557Data::Dumper - stringified perl data structures, suitable for both printing and C<eval>
558
559
560=head1 SYNOPSIS
561
562 use Data::Dumper;
563
564 # simple procedural interface
565 print Dumper($foo, $bar);
566
567 # extended usage with names
568 print Data::Dumper->Dump([$foo, $bar], [qw(foo *ary)]);
569
570 # configuration variables
571 {
572 local $Data::Dump::Purity = 1;
573 eval Data::Dumper->Dump([$foo, $bar], [qw(foo *ary)]);
574 }
575
576 # OO usage
577 $d = Data::Dumper->new([$foo, $bar], [qw(foo *ary)]);
578 ...
579 print $d->Dump;
580 ...
581 $d->Purity(1)->Terse(1)->Deepcopy(1);
582 eval $d->Dump;
583
584
585=head1 DESCRIPTION
586
587Given a list of scalars or reference variables, writes out their contents in
588perl syntax. The references can also be objects. The contents of each
589variable is output in a single Perl statement. Handles self-referential
590structures correctly.
591
592The return value can be C<eval>ed to get back an identical copy of the
593original reference structure.
594
595Any references that are the same as one of those passed in will be named
596C<$VAR>I<n> (where I<n> is a numeric suffix), and other duplicate references
597to substructures within C<$VAR>I<n> will be appropriately labeled using arrow
598notation. You can specify names for individual values to be dumped if you
599use the C<Dump()> method, or you can change the default C<$VAR> prefix to
600something else. See C<$Data::Dumper::Varname> and C<$Data::Dumper::Terse>
601below.
602
603The default output of self-referential structures can be C<eval>ed, but the
604nested references to C<$VAR>I<n> will be undefined, since a recursive
605structure cannot be constructed using one Perl statement. You should set the
606C<Purity> flag to 1 to get additional statements that will correctly fill in
607these references.
608
609In the extended usage form, the references to be dumped can be given
610user-specified names. If a name begins with a C<*>, the output will
611describe the dereferenced type of the supplied reference for hashes and
612arrays, and coderefs. Output of names will be avoided where possible if
613the C<Terse> flag is set.
614
615In many cases, methods that are used to set the internal state of the
616object will return the object itself, so method calls can be conveniently
617chained together.
618
619Several styles of output are possible, all controlled by setting
620the C<Indent> flag. See L<Configuration Variables or Methods> below
621for details.
622
623
624=head2 Methods
625
626=over 4
627
628=item I<PACKAGE>->new(I<ARRAYREF [>, I<ARRAYREF]>)
629
630Returns a newly created C<Data::Dumper> object. The first argument is an
631anonymous array of values to be dumped. The optional second argument is an
632anonymous array of names for the values. The names need not have a leading
633C<$> sign, and must be comprised of alphanumeric characters. You can begin
634a name with a C<*> to specify that the dereferenced type must be dumped
635instead of the reference itself, for ARRAY and HASH references.
636
637The prefix specified by C<$Data::Dumper::Varname> will be used with a
638numeric suffix if the name for a value is undefined.
639
640Data::Dumper will catalog all references encountered while dumping the
641values. Cross-references (in the form of names of substructures in perl
642syntax) will be inserted at all possible points, preserving any structural
643interdependencies in the original set of values. Structure traversal is
644depth-first, and proceeds in order from the first supplied value to
645the last.
646
647=item I<$OBJ>->Dump I<or> I<PACKAGE>->Dump(I<ARRAYREF [>, I<ARRAYREF]>)
648
649Returns the stringified form of the values stored in the object (preserving
650the order in which they were supplied to C<new>), subject to the
651configuration options below. In an array context, it returns a list
652of strings corresponding to the supplied values.
653
654The second form, for convenience, simply calls the C<new> method on its
655arguments before dumping the object immediately.
656
657=item I<$OBJ>->Dumpxs I<or> I<PACKAGE>->Dumpxs(I<ARRAYREF [>, I<ARRAYREF]>)
658
659This method is available if you were able to compile and install the XSUB
660extension to C<Data::Dumper>. It is exactly identical to the C<Dump> method
661above, only about 4 to 5 times faster, since it is written entirely in C.
662
663=item I<$OBJ>->Seen(I<[HASHREF]>)
664
665Queries or adds to the internal table of already encountered references.
666You must use C<Reset> to explicitly clear the table if needed. Such
667references are not dumped; instead, their names are inserted wherever they
668are encountered subsequently. This is useful especially for properly
669dumping subroutine references.
670
671Expects a anonymous hash of name => value pairs. Same rules apply for names
672as in C<new>. If no argument is supplied, will return the "seen" list of
673name => value pairs, in an array context. Otherwise, returns the object
674itself.
675
676=item I<$OBJ>->Values(I<[ARRAYREF]>)
677
678Queries or replaces the internal array of values that will be dumped.
679When called without arguments, returns the values. Otherwise, returns the
680object itself.
681
682=item I<$OBJ>->Names(I<[ARRAYREF]>)
683
684Queries or replaces the internal array of user supplied names for the values
685that will be dumped. When called without arguments, returns the names.
686Otherwise, returns the object itself.
687
688=item I<$OBJ>->Reset
689
690Clears the internal table of "seen" references and returns the object
691itself.
692
693=back
694
695=head2 Functions
696
697=over 4
698
699=item Dumper(I<LIST>)
700
701Returns the stringified form of the values in the list, subject to the
702configuration options below. The values will be named C<$VAR>I<n> in the
703output, where I<n> is a numeric suffix. Will return a list of strings
704in an array context.
705
706=item DumperX(I<LIST>)
707
708Identical to the C<Dumper()> function above, but this calls the XSUB
709implementation. Only available if you were able to compile and install
710the XSUB extensions in C<Data::Dumper>.
711
712=back
713
714=head2 Configuration Variables or Methods
715
716Several configuration variables can be used to control the kind of output
717generated when using the procedural interface. These variables are usually
718C<local>ized in a block so that other parts of the code are not affected by
719the change.
720
721These variables determine the default state of the object created by calling
722the C<new> method, but cannot be used to alter the state of the object
723thereafter. The equivalent method names should be used instead to query
724or set the internal state of the object.
725
726The method forms return the object itself when called with arguments,
727so that they can be chained together nicely.
728
729=over 4
730
731=item $Data::Dumper::Indent I<or> I<$OBJ>->Indent(I<[NEWVAL]>)
732
733Controls the style of indentation. It can be set to 0, 1, 2 or 3. Style 0
734spews output without any newlines, indentation, or spaces between list
735items. It is the most compact format possible that can still be called
736valid perl. Style 1 outputs a readable form with newlines but no fancy
737indentation (each level in the structure is simply indented by a fixed
738amount of whitespace). Style 2 (the default) outputs a very readable form
739which takes into account the length of hash keys (so the hash value lines
740up). Style 3 is like style 2, but also annotates the elements of arrays
741with their index (but the comment is on its own line, so array output
742consumes twice the number of lines). Style 2 is the default.
743
744=item $Data::Dumper::Purity I<or> I<$OBJ>->Purity(I<[NEWVAL]>)
745
746Controls the degree to which the output can be C<eval>ed to recreate the
747supplied reference structures. Setting it to 1 will output additional perl
748statements that will correctly recreate nested references. The default is
7490.
750
751=item $Data::Dumper::Pad I<or> I<$OBJ>->Pad(I<[NEWVAL]>)
752
753Specifies the string that will be prefixed to every line of the output.
754Empty string by default.
755
756=item $Data::Dumper::Varname I<or> I<$OBJ>->Varname(I<[NEWVAL]>)
757
758Contains the prefix to use for tagging variable names in the output. The
759default is "VAR".
760
761=item $Data::Dumper::Useqq I<or> I<$OBJ>->Useqq(I<[NEWVAL]>)
762
763When set, enables the use of double quotes for representing string values.
764Whitespace other than space will be represented as C<[\n\t\r]>, "unsafe"
765characters will be backslashed, and unprintable characters will be output as
766quoted octal integers. Since setting this variable imposes a performance
767penalty, the default is 0. The C<Dumpxs()> method does not honor this
768flag yet.
769
770=item $Data::Dumper::Terse I<or> I<$OBJ>->Terse(I<[NEWVAL]>)
771
772When set, Data::Dumper will emit single, non-self-referential values as
773atoms/terms rather than statements. This means that the C<$VAR>I<n> names
774will be avoided where possible, but be advised that such output may not
775always be parseable by C<eval>.
776
777=item $Data::Dumper::Freezer I<or> $I<OBJ>->Freezer(I<[NEWVAL]>)
778
779Can be set to a method name, or to an empty string to disable the feature.
780Data::Dumper will invoke that method via the object before attempting to
781stringify it. This method can alter the contents of the object (if, for
782instance, it contains data allocated from C), and even rebless it in a
783different package. The client is responsible for making sure the specified
784method can be called via the object, and that the object ends up containing
785only perl data types after the method has been called. Defaults to an empty
786string.
787
788=item $Data::Dumper::Toaster I<or> $I<OBJ>->Toaster(I<[NEWVAL]>)
789
790Can be set to a method name, or to an empty string to disable the feature.
791Data::Dumper will emit a method call for any objects that are to be dumped
792using the syntax C<bless(DATA, CLASS)->METHOD()>. Note that this means that
793the method specified will have to perform any modifications required on the
794object (like creating new state within it, and/or reblessing it in a
795different package) and then return it. The client is responsible for making
796sure the method can be called via the object, and that it returns a valid
797object. Defaults to an empty string.
798
799=item $Data::Dumper::Deepcopy I<or> $I<OBJ>->Deepcopy(I<[NEWVAL]>)
800
801Can be set to a boolean value to enable deep copies of structures.
802Cross-referencing will then only be done when absolutely essential
803(i.e., to break reference cycles). Default is 0.
804
805=item $Data::Dumper::Quotekeys I<or> $I<OBJ>->Quotekeys(I<[NEWVAL]>)
806
807Can be set to a boolean value to control whether hash keys are quoted.
808A false value will avoid quoting hash keys when it looks like a simple
809string. Default is 1, which will always enclose hash keys in quotes.
810
811=item $Data::Dumper::Bless I<or> $I<OBJ>->Bless(I<[NEWVAL]>)
812
813Can be set to a string that specifies an alternative to the C<bless>
814builtin operator used to create objects. A function with the specified
815name should exist, and should accept the same arguments as the builtin.
816Default is C<bless>.
817
818=back
819
820=head2 Exports
821
822=over 4
823
824=item Dumper
825
826=back
827
828=head1 EXAMPLES
829
830Run these code snippets to get a quick feel for the behavior of this
831module. When you are through with these examples, you may want to
832add or change the various configuration variables described above,
833to see their behavior. (See the testsuite in the Data::Dumper
834distribution for more examples.)
835
836
837 use Data::Dumper;
838
839 package Foo;
840 sub new {bless {'a' => 1, 'b' => sub { return "foo" }}, $_[0]};
841
842 package Fuz; # a weird REF-REF-SCALAR object
843 sub new {bless \($_ = \ 'fu\'z'), $_[0]};
844
845 package main;
846 $foo = Foo->new;
847 $fuz = Fuz->new;
848 $boo = [ 1, [], "abcd", \*foo,
849 {1 => 'a', 023 => 'b', 0x45 => 'c'},
850 \\"p\q\'r", $foo, $fuz];
851
852 ########
853 # simple usage
854 ########
855
856 $bar = eval(Dumper($boo));
857 print($@) if $@;
858 print Dumper($boo), Dumper($bar); # pretty print (no array indices)
859
860 $Data::Dumper::Terse = 1; # don't output names where feasible
861 $Data::Dumper::Indent = 0; # turn off all pretty print
862 print Dumper($boo), "\n";
863
864 $Data::Dumper::Indent = 1; # mild pretty print
865 print Dumper($boo);
866
867 $Data::Dumper::Indent = 3; # pretty print with array indices
868 print Dumper($boo);
869
870 $Data::Dumper::Useqq = 1; # print strings in double quotes
871 print Dumper($boo);
872
873
874 ########
875 # recursive structures
876 ########
877
878 @c = ('c');
879 $c = \@c;
880 $b = {};
881 $a = [1, $b, $c];
882 $b->{a} = $a;
883 $b->{b} = $a->[1];
884 $b->{c} = $a->[2];
885 print Data::Dumper->Dump([$a,$b,$c], [qw(a b c)]);
886
887
888 $Data::Dumper::Purity = 1; # fill in the holes for eval
889 print Data::Dumper->Dump([$a, $b], [qw(*a b)]); # print as @a
890 print Data::Dumper->Dump([$b, $a], [qw(*b a)]); # print as %b
891
892
893 $Data::Dumper::Deepcopy = 1; # avoid cross-refs
894 print Data::Dumper->Dump([$b, $a], [qw(*b a)]);
895
896
897 $Data::Dumper::Purity = 0; # avoid cross-refs
898 print Data::Dumper->Dump([$b, $a], [qw(*b a)]);
899
900
901 ########
902 # object-oriented usage
903 ########
904
905 $d = Data::Dumper->new([$a,$b], [qw(a b)]);
906 $d->Seen({'*c' => $c}); # stash a ref without printing it
907 $d->Indent(3);
908 print $d->Dump;
909 $d->Reset->Purity(0); # empty the seen cache
910 print join "----\n", $d->Dump;
911
912
913 ########
914 # persistence
915 ########
916
917 package Foo;
918 sub new { bless { state => 'awake' }, shift }
919 sub Freeze {
920 my $s = shift;
921 print STDERR "preparing to sleep\n";
922 $s->{state} = 'asleep';
923 return bless $s, 'Foo::ZZZ';
924 }
925
926 package Foo::ZZZ;
927 sub Thaw {
928 my $s = shift;
929 print STDERR "waking up\n";
930 $s->{state} = 'awake';
931 return bless $s, 'Foo';
932 }
933
934 package Foo;
935 use Data::Dumper;
936 $a = Foo->new;
937 $b = Data::Dumper->new([$a], ['c']);
938 $b->Freezer('Freeze');
939 $b->Toaster('Thaw');
940 $c = $b->Dump;
941 print $c;
942 $d = eval $c;
943 print Data::Dumper->Dump([$d], ['d']);
944
945
946 ########
947 # symbol substitution (useful for recreating CODE refs)
948 ########
949
950 sub foo { print "foo speaking\n" }
951 *other = \&foo;
952 $bar = [ \&other ];
953 $d = Data::Dumper->new([\&other,$bar],['*other','bar']);
954 $d->Seen({ '*foo' => \&foo });
955 print $d->Dump;
956
957
958=head1 BUGS
959
960Due to limitations of Perl subroutine call semantics, you cannot pass an
961array or hash. Prepend it with a C<\> to pass its reference instead. This
962will be remedied in time, with the arrival of prototypes in later versions
963of Perl. For now, you need to use the extended usage form, and prepend the
964name with a C<*> to output it as a hash or array.
965
966C<Data::Dumper> cheats with CODE references. If a code reference is
967encountered in the structure being processed, an anonymous subroutine that
968contains the string '"DUMMY"' will be inserted in its place, and a warning
969will be printed if C<Purity> is set. You can C<eval> the result, but bear
970in mind that the anonymous sub that gets created is just a placeholder.
971Someday, perl will have a switch to cache-on-demand the string
972representation of a compiled piece of code, I hope. If you have prior
973knowledge of all the code refs that your data structures are likely
974to have, you can use the C<Seen> method to pre-seed the internal reference
975table and make the dumped output point to them, instead. See L<EXAMPLES>
976above.
977
978The C<Useqq> flag is not honored by C<Dumpxs()> (it always outputs
979strings in single quotes).
980
981SCALAR objects have the weirdest looking C<bless> workaround.
982
983
984=head1 AUTHOR
985
986Gurusamy Sarathy gsar@umich.edu
987
988Copyright (c) 1996-98 Gurusamy Sarathy. All rights reserved.
989This program is free software; you can redistribute it and/or
990modify it under the same terms as Perl itself.
991
992
993=head1 VERSION
994
7820172a 995Version 2.10 (31 Oct 1998)
823edd99 996
997=head1 SEE ALSO
998
999perl(1)
1000
1001=cut