my $val = $v;
$val = &{'overload::StrVal'}($v)
if %overload:: and defined &{'overload::StrVal'};
- # Match type and address.
- # Unblessed references will look like TYPE(0x...)
- # Blessed references will look like Class=TYPE(0x...)
- ($start_part, $val) = split /=/,$val;
- $val = $start_part unless defined $val;
- ($item_type, $address) =
- $val =~ /([^\(]+) # Keep stuff that's
- # not an open paren
- \( # Skip open paren
- (0x[0-9a-f]+) # Save the address
- \) # Skip close paren
- $/x; # Should be at end now
-
+ ($address) = $val =~ /(0x[0-9a-f]+)\)$/ ;
if (!$dumpReused && defined $address) {
$address{$address}++ ;
if ( $address{$address} > 1 ) {
}
}
} elsif (ref \$v eq 'GLOB') {
- # This is a raw glob. Special handling for that.
$address = "$v" . ""; # To avoid a bug with globs
$address{$address}++ ;
if ( $address{$address} > 1 ) {
}
if (ref $v eq 'Regexp') {
- # Reformat the regexp to look the standard way.
my $re = "$v";
$re =~ s,/,\\/,g;
print "$sp-> qr/$re/\n";
return;
}
- if ( $item_type eq 'HASH' ) {
- # Hash ref or hash-based object.
+ if ( UNIVERSAL::isa($v, 'HASH') ) {
@sortKeys = sort keys(%$v) ;
undef $more ;
$tHashDepth = $#sortKeys ;
}
print "$sp empty hash\n" unless @sortKeys;
print "$sp$more" if defined $more ;
- } elsif ( $item_type eq 'ARRAY' ) {
- # Array ref or array-based object. Also: undef.
- # See how big the array is.
+ } elsif ( UNIVERSAL::isa($v, 'ARRAY') ) {
$tArrayDepth = $#{$v} ;
undef $more ;
- # Bigger than the max?
$tArrayDepth = $#{$v} < $arrayDepth-1 ? $#{$v} : $arrayDepth-1
if defined $arrayDepth && $arrayDepth ne '';
- # Yep. Don't show it all.
$more = "....\n" if $tArrayDepth < $#{$v} ;
$shortmore = "";
$shortmore = " ..." if $tArrayDepth < $#{$v} ;
-
if ($compactDump && !grep(ref $_, @{$v})) {
if ($#$v >= 0) {
$short = $sp . "0..$#{$v} " .
return if $DB::signal;
print "$sp$num ";
if (exists $v->[$num]) {
- if (defined $v->[$num]) {
- DumpElem $v->[$num], $s, $m-1;
- }
- else {
- print "undef\n";
- }
+ DumpElem $v->[$num], $s, $m-1;
} else {
print "empty slot\n";
}
}
print "$sp empty array\n" unless @$v;
print "$sp$more" if defined $more ;
- } elsif ( $item_type eq 'SCALAR' ) {
- unless (defined $$v) {
- print "$sp-> undef\n";
- return;
- }
+ } elsif ( UNIVERSAL::isa($v, 'SCALAR') or ref $v eq 'REF' ) {
print "$sp-> ";
DumpElem $$v, $s, $m-1;
- } elsif ( $item_type eq 'REF' ) {
- print "$sp-> $$v\n";
- return unless defined $$v;
- unwrap($$v, $s+3, $m-1);
- } elsif ( $item_type eq 'CODE' ) {
- # Code object or reference.
+ } elsif ( UNIVERSAL::isa($v, 'CODE') ) {
print "$sp-> ";
dumpsub (0, $v);
- } elsif ( $item_type eq 'GLOB' ) {
- # Glob object or reference.
+ } elsif ( UNIVERSAL::isa($v, 'GLOB') ) {
print "$sp-> ",&stringify($$v,1),"\n";
if ($globPrint) {
$s += 3;
print( (' ' x ($s+3)) . "FileHandle({$$v}) => fileno($fileno)\n" );
}
} elsif (ref \$v eq 'GLOB') {
- # Raw glob (again?)
if ($globPrint) {
dumpglob($s, "{$v}", $v, 1, $m-1) if $globPrint;
} elsif (defined ($fileno = fileno(\$v))) {