This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Retract #21010.
authorJarkko Hietaniemi <jhi@iki.fi>
Sun, 7 Sep 2003 07:04:53 +0000 (07:04 +0000)
committerJarkko Hietaniemi <jhi@iki.fi>
Sun, 7 Sep 2003 07:04:53 +0000 (07:04 +0000)
p4raw-id: //depot/perl@21061

lib/dumpvar.pl

index f4a4399..12c9e91 100644 (file)
@@ -136,19 +136,7 @@ sub unwrap {
       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 ) { 
@@ -157,7 +145,6 @@ sub unwrap {
        } 
       }
     } 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 ) { 
@@ -167,15 +154,13 @@ sub unwrap {
     }
 
     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 ; 
@@ -208,19 +193,14 @@ sub unwrap {
        }
        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}  " . 
@@ -240,35 +220,20 @@ sub unwrap {
            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;
@@ -277,7 +242,6 @@ sub unwrap {
        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))) {