File Coverage

blib/lib/Dumpvalue.pm
Criterion Covered Total %
statement 297 309 96.1
branch 158 204 77.4
condition 82 141 58.1
subroutine 27 27 100.0
pod 11 23 47.8
total 575 704 81.6


line stmt bran cond sub pod time code
1 1     1   1201 use 5.006_001; # for (defined ref) and $#$v and our
  1         3  
  1         41  
2             package Dumpvalue;
3 1     1   6 use strict;
  1         3  
  1         695  
4             our $VERSION = '1.17';
5             our(%address, $stab, @stab, %stab, %subs);
6              
7             # documentation nits, handle complex data structures better by chromatic
8             # translate control chars to ^X - Randal Schwartz
9             # Modifications to print types by Peter Gordon v1.0
10              
11             # Ilya Zakharevich -- patches after 5.001 (and some before ;-)
12              
13             # Won't dump symbol tables and contents of debugged files by default
14              
15             # (IZ) changes for objectification:
16             # c) quote() renamed to method set_quote();
17             # d) unctrlSet() renamed to method set_unctrl();
18             # f) Compiles with 'use strict', but in two places no strict refs is needed:
19             # maybe more problems are waiting...
20              
21             my %defaults = (
22             globPrint => 0,
23             printUndef => 1,
24             tick => "auto",
25             unctrl => 'quote',
26             subdump => 1,
27             dumpReused => 0,
28             bareStringify => 1,
29             hashDepth => '',
30             arrayDepth => '',
31             dumpDBFiles => '',
32             dumpPackages => '',
33             quoteHighBit => '',
34             usageOnly => '',
35             compactDump => '',
36             veryCompact => '',
37             stopDbSignal => '',
38             );
39              
40             sub new {
41 1     1 0 872 my $class = shift;
42 1         13 my %opt = (%defaults, @_);
43 1         10 bless \%opt, $class;
44             }
45              
46             sub set {
47 1     1 1 13 my $self = shift;
48 1         5 my %opt = @_;
49 1         6 @$self{keys %opt} = values %opt;
50             }
51              
52             sub get {
53 2     2 1 4 my $self = shift;
54 2 50       12 wantarray ? @$self{@_} : $$self{pop @_};
55             }
56              
57             sub dumpValue {
58 4     4 1 9 my $self = shift;
59 4 50       11 die "usage: \$dumper->dumpValue(value)" unless @_ == 1;
60 4         8 local %address;
61 4         14 local $^W=0;
62 4 100       15 (print "undef\n"), return unless defined $_[0];
63 3 100       14 (print $self->stringify($_[0]), "\n"), return unless ref $_[0];
64 1         7 $self->unwrap($_[0],0);
65             }
66              
67             sub dumpValues {
68 3     3 1 7 my $self = shift;
69 3         4 local %address;
70 3         11 local $^W=0;
71 3 100       10 (print "undef\n"), return unless defined $_[0];
72 2         9 $self->unwrap(\@_,0);
73             }
74              
75             # This one is good for variable names:
76              
77             sub unctrl {
78 5     5 1 12 local($_) = @_;
79              
80 5 100       24 return \$_ if ref \$_ eq "GLOB";
81 4         12 s/([\001-\037\177])/'^'.pack('c',ord($1)^64)/eg;
  1         10  
82 4         24 $_;
83             }
84              
85             sub stringify {
86 72     72 1 107 my $self = shift;
87 72         99 local $_ = shift;
88 72         89 my $noticks = shift;
89 72         103 my $tick = $self->{tick};
90              
91 72 100 100     192 return 'undef' unless defined $_ or not $self->{printUndef};
92 71 100       186 return $_ . "" if ref \$_ eq 'GLOB';
93 1     1   18 { no strict 'refs';
  1         3  
  1         1050  
  70         76  
94 10         39 $_ = &{'overload::StrVal'}($_)
  10         47  
95             if $self->{bareStringify} and ref $_
96 70 50 66     454 and %overload:: and defined &{'overload::StrVal'};
      66        
      66        
97             }
98              
99 70 100       172 if ($tick eq 'auto') {
100 49 100       131 if (/[\000-\011\013-\037\177]/) {
101 4         8 $tick = '"';
102             } else {
103 45         61 $tick = "'";
104             }
105             }
106 70 100       130 if ($tick eq "'") {
    100          
    50          
107 66         153 s/([\'\\])/\\$1/g;
108             } elsif ($self->{unctrl} eq 'unctrl') {
109 1         3 s/([\"\\])/\\$1/g ;
110 1         6 s/([\000-\037\177])/'^'.pack('c',ord($1)^64)/eg;
  1         7  
111 1 50       4 s/([\200-\377])/'\\0x'.sprintf('%2X',ord($1))/eg
  0         0  
112             if $self->{quoteHighBit};
113             } elsif ($self->{unctrl} eq 'quote') {
114 3 50       16 s/([\"\\\$\@])/\\$1/g if $tick eq '"';
115 3         9 s/\033/\\e/g;
116 3         11 s/([\000-\037\177])/'\\c'.chr(ord($1)^64)/eg;
  2         11  
117             }
118 70 100       181 s/([\200-\377])/'\\'.sprintf('%3o',ord($1))/eg if $self->{quoteHighBit};
  1         6  
119 70 100 100     1214 ($noticks || /^\d+(\.\d*)?\Z/)
120             ? $_
121             : $tick . $_ . $tick;
122             }
123              
124             sub DumpElem {
125 19     19 0 38 my ($self, $v) = (shift, shift);
126 19         58 my $short = $self->stringify($v, ref $v);
127 19         31 my $shortmore = '';
128 19 100 100     193 if ($self->{veryCompact} && ref $v
    100 66        
      66        
      100        
      66        
      66        
129             && (ref $v eq 'ARRAY' and !grep(ref $_, @$v) )) {
130 4         5 my $depth = $#$v;
131 4 100 100     20 ($shortmore, $depth) = (' ...', $self->{arrayDepth} - 1)
132             if $self->{arrayDepth} and $depth >= $self->{arrayDepth};
133 4         16 my @a = map $self->stringify($_), @$v[0..$depth];
134 4         6 print "0..$#{$v} @a$shortmore\n";
  4         24  
135             } elsif ($self->{veryCompact} && ref $v
136             && (ref $v eq 'HASH') and !grep(ref $_, values %$v)) {
137 3         66 my @a = sort keys %$v;
138 3         7 my $depth = $#a;
139 3 100 66     21 ($shortmore, $depth) = (' ...', $self->{hashDepth} - 1)
140             if $self->{hashDepth} and $depth >= $self->{hashDepth};
141 3         9 my @b = map {$self->stringify($_) . " => " . $self->stringify($$v{$_})}
  7         16  
142             @a[0..$depth];
143 3         5 local $" = ', ';
144 3         18 print "@b$shortmore\n";
145             } else {
146 12         46 print "$short\n";
147 12         106 $self->unwrap($v,shift);
148             }
149             }
150              
151             sub unwrap {
152 28     28 0 42 my $self = shift;
153 28 100 66     89 return if $DB::signal and $self->{stopDbSignal};
154 27         44 my ($v) = shift ;
155 27         32 my ($s) = shift ; # extra no of spaces
156 27         28 my $sp;
157 27         43 my (%v,@v,$address,$short,$fileno);
158              
159 27         58 $sp = " " x $s ;
160 27         30 $s += 3 ;
161              
162             # Check for reused addresses
163 27 100       77 if (ref $v) {
    100          
164 16         24 my $val = $v;
165 1     1   6 { no strict 'refs';
  1         2  
  1         3489  
  16         17  
166 16         68 $val = &{'overload::StrVal'}($v)
  16         82  
167 16 50 33     43 if %overload:: and defined &{'overload::StrVal'};
168             }
169 16         142 ($address) = $val =~ /(0x[0-9a-f]+)\)$/ ;
170 16 100 66     72 if (!$self->{dumpReused} && defined $address) {
171 3         9 $address{$address}++ ;
172 3 100       13 if ( $address{$address} > 1 ) {
173 1         6 print "${sp}-> REUSED_ADDRESS\n" ;
174 1         10 return ;
175             }
176             }
177             } elsif (ref \$v eq 'GLOB') {
178 2         9 $address = "$v" . ""; # To avoid a bug with globs
179 2         6 $address{$address}++ ;
180 2 100       9 if ( $address{$address} > 1 ) {
181 1         6 print "${sp}*DUMPED_GLOB*\n" ;
182 1         10 return ;
183             }
184             }
185              
186 25 100       75 if (ref $v eq 'Regexp') {
187 1         3 my $re = "$v";
188 1         4 $re =~ s,/,\\/,g;
189 1         6 print "$sp-> qr/$re/\n";
190 1         10 return;
191             }
192              
193 24 100 66     249 if ( UNIVERSAL::isa($v, 'HASH') ) {
    100          
    100          
    100          
    50          
    100          
194 4         111 my @sortKeys = sort keys(%$v) ;
195 4         13 my $more;
196 4         6 my $tHashDepth = $#sortKeys ;
197 4 100       79 $tHashDepth = $#sortKeys < $self->{hashDepth}-1 ? $#sortKeys : $self->{hashDepth}-1
    50          
198             unless $self->{hashDepth} eq '' ;
199 4 100       14 $more = "....\n" if $tHashDepth < $#sortKeys ;
200 4         8 my $shortmore = "";
201 4 100       11 $shortmore = ", ..." if $tHashDepth < $#sortKeys ;
202 4         18 $#sortKeys = $tHashDepth ;
203 4 100 66     18 if ($self->{compactDump} && !grep(ref $_, values %{$v})) {
  2         36  
204 2         4 $short = $sp;
205 2         3 my @keys;
206 2         6 for (@sortKeys) {
207 4         11 push @keys, $self->stringify($_) . " => " . $self->stringify($v->{$_});
208             }
209 2         7 $short .= join ', ', @keys;
210 2         4 $short .= $shortmore;
211 2 50       15 (print "$short\n"), return if length $short <= $self->{compactDump};
212             }
213 2         6 for my $key (@sortKeys) {
214 1 50 33     6 return if $DB::signal and $self->{stopDbSignal};
215 1         3 my $value = $ {$v}{$key} ;
  1         3  
216 1         5 print $sp, $self->stringify($key), " => ";
217 1         10 $self->DumpElem($value, $s);
218             }
219 2 100       11 print "$sp empty hash\n" unless @sortKeys;
220 2 50       20 print "$sp$more" if defined $more ;
221             } elsif ( UNIVERSAL::isa($v, 'ARRAY') ) {
222 7         9 my $tArrayDepth = $#{$v} ;
  7         13  
223 7         13 my $more ;
224 7 100       36 $tArrayDepth = $#$v < $self->{arrayDepth}-1 ? $#$v : $self->{arrayDepth}-1
    100          
225             unless $self->{arrayDepth} eq '' ;
226 7 100       12 $more = "....\n" if $tArrayDepth < $#{$v} ;
  7         18  
227 7         12 my $shortmore = "";
228 7 100       8 $shortmore = " ..." if $tArrayDepth < $#{$v} ;
  7         16  
229 7 100 100     25 if ($self->{compactDump} && !grep(ref $_, @{$v})) {
  4         21  
230 3 50       9 if ($#$v >= 0) {
231 3 50       15 $short = $sp . "0..$#{$v} " .
  6         22  
232             join(" ",
233 3         5 map {exists $v->[$_] ? $self->stringify($v->[$_]) : "empty"} (0..$tArrayDepth)
234             ) . "$shortmore";
235             } else {
236 0         0 $short = $sp . "empty array";
237             }
238 3 50       22 (print "$short\n"), return if length $short <= $self->{compactDump};
239             }
240 4         12 for my $num (0 .. $tArrayDepth) {
241 3 50 33     12 return if $DB::signal and $self->{stopDbSignal};
242 3         17 print "$sp$num ";
243 3 50       22 if (exists $v->[$num]) {
244 3         10 $self->DumpElem($v->[$num], $s);
245             } else {
246 0         0 print "empty slot\n";
247             }
248             }
249 4 100       24 print "$sp empty array\n" unless @$v;
250 4 50       25 print "$sp$more" if defined $more ;
251             } elsif ( UNIVERSAL::isa($v, 'SCALAR') or ref $v eq 'REF' ) {
252 2         13 print "$sp-> ";
253 2         18 $self->DumpElem($$v, $s);
254             } elsif ( UNIVERSAL::isa($v, 'CODE') ) {
255 1         8 print "$sp-> ";
256 1         21 $self->dumpsub(0, $v);
257             } elsif ( UNIVERSAL::isa($v, 'GLOB') ) {
258 0         0 print "$sp-> ",$self->stringify($$v,1),"\n";
259 0 0       0 if ($self->{globPrint}) {
    0          
260 0         0 $s += 3;
261 0         0 $self->dumpglob('', $s, "{$$v}", $$v, 1);
262             } elsif (defined ($fileno = fileno($v))) {
263 0         0 print( (' ' x ($s+3)) . "FileHandle({$$v}) => fileno($fileno)\n" );
264             }
265             } elsif (ref \$v eq 'GLOB') {
266 1 50       4 if ($self->{globPrint}) {
    0          
267 1         10 $self->dumpglob('', $s, "{$v}", $v, 1);
268             } elsif (defined ($fileno = fileno(\$v))) {
269 0         0 print( (' ' x $s) . "FileHandle({$v}) => fileno($fileno)\n" );
270             }
271             }
272             }
273              
274             sub matchvar {
275 0         0 $_[0] eq $_[1] or
276             ($_[1] =~ /^([!~])(.)([\x00-\xff]*)/) and
277 521 100 33 521 0 6446 ($1 eq '!') ^ (eval {($_[2] . "::" . $_[0]) =~ /$2$3/});
278             }
279              
280             sub compactDump {
281 4     4 1 6 my $self = shift;
282 4 100       15 $self->{compactDump} = shift if @_;
283 4 100 66     22 $self->{compactDump} = 6*80-1
284             if $self->{compactDump} and $self->{compactDump} < 2;
285 4         15 $self->{compactDump};
286             }
287              
288             sub veryCompact {
289 1     1 1 3 my $self = shift;
290 1 50       6 $self->{veryCompact} = shift if @_;
291 1 50 33     11 $self->compactDump(1) if !$self->{compactDump} and $self->{veryCompact};
292 1         4 $self->{veryCompact};
293             }
294              
295             sub set_unctrl {
296 3     3 1 4 my $self = shift;
297 3 100       9 if (@_) {
298 2         4 my $in = shift;
299 2 100 66     12 if ($in eq 'unctrl' or $in eq 'quote') {
300 1         3 $self->{unctrl} = $in;
301             } else {
302 1         4 print "Unknown value for 'unctrl'.\n";
303             }
304             }
305 3         14 $self->{unctrl};
306             }
307              
308             sub set_quote {
309 3     3 1 8 my $self = shift;
310 3 100 66     33 if (@_ and $_[0] eq '"') {
    100 66        
    50          
311 1         3 $self->{tick} = '"';
312 1         3 $self->{unctrl} = 'quote';
313             } elsif (@_ and $_[0] eq 'auto') {
314 1         2 $self->{tick} = 'auto';
315 1         2 $self->{unctrl} = 'quote';
316             } elsif (@_) { # Need to set
317 1         2 $self->{tick} = "'";
318 1         2 $self->{unctrl} = 'unctrl';
319             }
320 3         6 $self->{tick};
321             }
322              
323             sub dumpglob {
324 10     10 0 1664 my $self = shift;
325 10 100 66     39 return if $DB::signal and $self->{stopDbSignal};
326 9         33 my ($package, $off, $key, $val, $all) = @_;
327 9         17 local(*stab) = $val;
328 9         13 my $fileno;
329 9 100 66     66 if (($key !~ /^_{dumpDBFiles}) and defined $stab) {
      66        
330 2         10 print( (' ' x $off) . "\$", &unctrl($key), " = " );
331 2         17 $self->DumpElem($stab, 3+$off);
332             }
333 9 100 66     56 if (($key !~ /^_{dumpDBFiles}) and @stab) {
      66        
334 2         11 print( (' ' x $off) . "\@$key = (\n" );
335 2         17 $self->unwrap(\@stab,3+$off) ;
336 2         18 print( (' ' x $off) . ")\n" );
337             }
338 9 50 33     104 if ($key ne "main::" && $key ne "DB::" && %stab
      66        
      33        
      66        
      33        
      33        
      33        
      33        
339             && ($self->{dumpPackages} or $key !~ /::$/)
340             && ($key !~ /^_{dumpDBFiles})
341             && !($package eq "Dumpvalue" and $key eq "stab")) {
342 2         10 print( (' ' x $off) . "\%$key = (\n" );
343 2         14 $self->unwrap(\%stab,3+$off) ;
344 2         25 print( (' ' x $off) . ")\n" );
345             }
346 9 100       35 if (defined ($fileno = fileno(*stab))) {
347 1         7 print( (' ' x $off) . "FileHandle($key) => fileno($fileno)\n" );
348             }
349 9 100       35 if ($all) {
350 2 100       13 if (defined &stab) {
351 1         5 $self->dumpsub($off, $key);
352             }
353             }
354             }
355              
356             sub CvGV_name {
357 4     4 0 1255 my $self = shift;
358 4         6 my $in = shift;
359 4 50       17 return if $self->{skipCvGV}; # Backdoor to avoid problems if XS broken...
360 4         9 $in = \&$in; # Hard reference...
361 4 50       6 eval {require Devel::Peek; 1} or return;
  4         4324  
  4         563  
362 4 50       24 my $gv = Devel::Peek::CvGV($in) or return;
363 4         74 *$gv{PACKAGE} . '::' . *$gv{NAME};
364             }
365              
366             sub dumpsub {
367 4     4 0 567 my $self = shift;
368 4         11 my ($off,$sub) = @_;
369 4         6 my $ini = $sub;
370 4         5 my $s;
371 4 50       14 $sub = $1 if $sub =~ /^\{\*(.*)\}$/;
372 4 50       24 my $subref = defined $1 ? \&$sub : \&$ini;
373 4   33     38 my $place = $DB::sub{$sub} || (($s = $subs{"$subref"}) && $DB::sub{$s})
374             || (($s = $self->CvGV_name($subref)) && $DB::sub{$s})
375             || ($self->{subdump} && ($s = $self->findsubs("$subref"))
376             && $DB::sub{$s});
377 4 50       15 $s = $sub unless defined $s;
378 4 100       12 $place = '???' unless defined $place;
379 4         30 print( (' ' x $off) . "&$s in $place\n" );
380             }
381              
382             sub findsubs {
383 5     5 0 647 my $self = shift;
384 5 100       26 return undef unless %DB::sub;
385 1         2 my ($addr, $name, $loc);
386 1         6 while (($name, $loc) = each %DB::sub) {
387 1         4 $addr = \&$name;
388 1         6 $subs{"$addr"} = $name;
389             }
390 1         2 $self->{subdump} = 0;
391 1         6 $subs{ shift() };
392             }
393              
394             sub dumpvars {
395 3     3 1 6 my $self = shift;
396 3         9 my ($package,@vars) = @_;
397 3         13 local(%address,$^W);
398 3         6 my ($key,$val);
399 3 50       12 $package .= "::" unless $package =~ /::$/;
400 3         8 *stab = *main::;
401              
402 3         23 while ($package =~ /(\w+?::)/g) {
403 3         15 *stab = $ {stab}{$1};
404             }
405 3         6 $self->{TotalStrings} = 0;
406 3         6 $self->{Strings} = 0;
407 3         6 $self->{CompleteTotal} = 0;
408 3         15 while (($key,$val) = each(%stab)) {
409 519 100 66     2245 return if $DB::signal and $self->{stopDbSignal};
410 518 100 66     1645 next if @vars && !grep( matchvar($key, $_), @vars );
411 1 50       5 if ($self->{usageOnly}) {
412 0 0 0     0 $self->globUsage(\$val, $key)
      0        
413             if ($package ne 'Dumpvalue' or $key ne 'stab')
414             and ref(\$val) eq 'GLOB';
415             } else {
416 1         6 $self->dumpglob($package, 0,$key, $val);
417             }
418             }
419 2 100       20 if ($self->{usageOnly}) {
420 1         10 print <
421             String space: $self->{TotalStrings} bytes in $self->{Strings} strings.
422             EOP
423 1         9 $self->{CompleteTotal} += $self->{TotalStrings};
424 1         6 print <
425             Grand total = $self->{CompleteTotal} bytes (1 level deep) + overhead.
426             EOP
427             }
428             }
429              
430             sub scalarUsage {
431 15     15 0 19 my $self = shift;
432 15         18 my $size;
433 15 100       92 if (UNIVERSAL::isa($_[0], 'ARRAY')) {
    50          
    50          
434 1         6 $size = $self->arrayUsage($_[0]);
435             } elsif (UNIVERSAL::isa($_[0], 'HASH')) {
436 0         0 $size = $self->hashUsage($_[0]);
437             } elsif (!ref($_[0])) {
438 14         20 $size = length($_[0]);
439             }
440 15         23 $self->{TotalStrings} += $size;
441 15         18 $self->{Strings}++;
442 15         41 $size;
443             }
444              
445             sub arrayUsage { # array ref, name
446 9     9 0 12 my $self = shift;
447 9         11 my $size = 0;
448 9         11 map {$size += $self->scalarUsage($_)} @{$_[0]};
  13         26  
  9         16  
449 9         11 my $len = @{$_[0]};
  9         15  
450 9 100       36 print "\@$_[1] = $len item", ($len > 1 ? "s" : ""), " (data: $size bytes)\n"
    100          
451             if defined $_[1];
452 9         21 $self->{CompleteTotal} += $size;
453 9         19 $size;
454             }
455              
456             sub hashUsage { # hash ref, name
457 3     3 0 7 my $self = shift;
458 3         7 my @keys = keys %{$_[0]};
  3         10  
459 3         6 my @values = values %{$_[0]};
  3         9  
460 3         7 my $keys = $self->arrayUsage(\@keys);
461 3         9 my $values = $self->arrayUsage(\@values);
462 3         5 my $len = @keys;
463 3         4 my $total = $keys + $values;
464 3 50       29 print "\%$_[1] = $len item", ($len > 1 ? "s" : ""),
    50          
465             " (keys: $keys; values: $values; total: $total bytes)\n"
466             if defined $_[1];
467 3         24 $total;
468             }
469              
470             sub globUsage { # glob ref, name
471 1     1 0 2 my $self = shift;
472 1         3 local *stab = *{$_[0]};
  1         3  
473 1         2 my $total = 0;
474 1 50       6 $total += $self->scalarUsage($stab) if defined $stab;
475 1 50       8 $total += $self->arrayUsage(\@stab, $_[1]) if @stab;
476 1 50 33     28 $total += $self->hashUsage(\%stab, $_[1])
      33        
477             if %stab and $_[1] ne "main::" and $_[1] ne "DB::";
478             #and !($package eq "Dumpvalue" and $key eq "stab"));
479 1         5 $total;
480             }
481              
482             1;
483              
484             =head1 NAME
485              
486             Dumpvalue - provides screen dump of Perl data.
487              
488             =head1 SYNOPSIS
489              
490             use Dumpvalue;
491             my $dumper = Dumpvalue->new;
492             $dumper->set(globPrint => 1);
493             $dumper->dumpValue(\*::);
494             $dumper->dumpvars('main');
495             my $dump = $dumper->stringify($some_value);
496              
497             =head1 DESCRIPTION
498              
499             =head2 Creation
500              
501             A new dumper is created by a call
502              
503             $d = Dumpvalue->new(option1 => value1, option2 => value2)
504              
505             Recognized options:
506              
507             =over 4
508              
509             =item C, C
510              
511             Print only first N elements of arrays and hashes. If false, prints all the
512             elements.
513              
514             =item C, C
515              
516             Change style of array and hash dump. If true, short array
517             may be printed on one line.
518              
519             =item C
520              
521             Whether to print contents of globs.
522              
523             =item C
524              
525             Dump arrays holding contents of debugged files.
526              
527             =item C
528              
529             Dump symbol tables of packages.
530              
531             =item C
532              
533             Dump contents of "reused" addresses.
534              
535             =item C, C, C
536              
537             Change style of string dump. Default value of C is C, one
538             can enable either double-quotish dump, or single-quotish by setting it
539             to C<"> or C<'>. By default, characters with high bit set are printed
540             I. If C is set, they will be quoted.
541              
542             =item C
543              
544             rudimentary per-package memory usage dump. If set,
545             C calculates total size of strings in variables in the package.
546              
547             =item unctrl
548              
549             Changes the style of printout of strings. Possible values are
550             C and C.
551              
552             =item subdump
553              
554             Whether to try to find the subroutine name given the reference.
555              
556             =item bareStringify
557              
558             Whether to write the non-overloaded form of the stringify-overloaded objects.
559              
560             =item quoteHighBit
561              
562             Whether to print chars with high bit set in binary or "as is".
563              
564             =item stopDbSignal
565              
566             Whether to abort printing if debugger signal flag is raised.
567              
568             =back
569              
570             Later in the life of the object the methods may be queries with get()
571             method and set() method (which accept multiple arguments).
572              
573             =head2 Methods
574              
575             =over 4
576              
577             =item dumpValue
578              
579             $dumper->dumpValue($value);
580             $dumper->dumpValue([$value1, $value2]);
581              
582             Prints a dump to the currently selected filehandle.
583              
584             =item dumpValues
585              
586             $dumper->dumpValues($value1, $value2);
587              
588             Same as C<< $dumper->dumpValue([$value1, $value2]); >>.
589              
590             =item stringify
591              
592             my $dump = $dumper->stringify($value [,$noticks] );
593              
594             Returns the dump of a single scalar without printing. If the second
595             argument is true, the return value does not contain enclosing ticks.
596             Does not handle data structures.
597              
598             =item dumpvars
599              
600             $dumper->dumpvars('my_package');
601             $dumper->dumpvars('my_package', 'foo', '~bar$', '!......');
602              
603             The optional arguments are considered as literal strings unless they
604             start with C<~> or C, in which case they are interpreted as regular
605             expressions (possibly negated).
606              
607             The second example prints entries with names C, and also entries
608             with names which ends on C, or are shorter than 5 chars.
609              
610             =item set_quote
611              
612             $d->set_quote('"');
613              
614             Sets C and C options to suitable values for printout with the
615             given quote char. Possible values are C, C<'> and C<">.
616              
617             =item set_unctrl
618              
619             $d->set_unctrl('unctrl');
620              
621             Sets C option with checking for an invalid argument.
622             Possible values are C and C.
623              
624             =item compactDump
625              
626             $d->compactDump(1);
627              
628             Sets C option. If the value is 1, sets to a reasonable
629             big number.
630              
631             =item veryCompact
632              
633             $d->veryCompact(1);
634              
635             Sets C and C options simultaneously.
636              
637             =item set
638              
639             $d->set(option1 => value1, option2 => value2);
640              
641             =item get
642              
643             @values = $d->get('option1', 'option2');
644              
645             =back
646              
647             =cut
648