Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Displaying symbol tables for debugging

by integral (Hermit)
on Feb 09, 2003 at 08:37 UTC ( #233859=snippet: print w/ replies, xml ) Need Help??

Description: Although there are now Devel:: modules on CPAN which do an excellent job of making symbol tables easy to play with, I wrote these three routines for quick debugging of some code which played around with Safe and other symbol table tricks.
sub packages {
  print "Packages: ", join(" ", grep /::$/, keys %::), "\n";
  print "  INC: ", join(" ", sort keys %INC), "\n";
}

sub symbols {
  my $pkg = $_[0] || '';
  no strict 'refs';
  print "Symbols: ", join(" ", sort keys %{$pkg.'::'}), "\n";
}

sub symbols2 {
  my $pkg = $_[0] || '';
  no strict 'refs';
  print "Symbols in ${pkg}::\n";
  my $hash = *{$pkg.'::'}{HASH};
  for (sort grep {!/::$|^_</} keys %$hash) {
    my $sym = $_;
    my $glob = $hash->{$_};
    $sym =~ s/[[:cntrl:]]/'^' . chr(ord($&) + ord('@'))/ge;
    print "  $sym (", *{$glob}{PACKAGE}, '::', *{$glob}{NAME}, "): ";
    if (defined $$_) {
      print "SCALAR='$$glob' ";
    };
    for my $THING (qw(ARRAY HASH CODE IO)) {
      my $ref = *{$glob}{$THING};
      if (defined $ref) {
        print "$THING=$ref ";
      }
    }
    print "\n";
  }
}
Comment on Displaying symbol tables for debugging
Download Code

Back to Snippets Section

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://233859]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (5)
As of 2014-09-16 00:59 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite cookbook is:










    Results (155 votes), past polls