]> git.donarmstrong.com Git - infobot.git/blob - scripts/vartree.pl
dunno
[infobot.git] / scripts / vartree.pl
1 #!/usr/bin/perl -w
2 # hrm...
3
4 # use strict;
5
6 local @test;
7 local %test;
8
9 $test{'hash0r'}   = 2;
10 $test{'hegdfgsd'} = 'GSDFSDfsd';
11
12 push( @test, "heh." );
13 push( @test, \%test );
14
15 &vartree( \%main::, 'main::' );
16
17 sub tree {
18     my ( $pad, $ref, $symname ) = @_;
19     my $padded = " " x $pad;
20     my @list;
21     my $scalar = 0;
22     my $size   = 0;
23
24     @list = keys %{$symname} if ( $ref eq 'HASH' );
25     @list = @{$symname}      if ( $ref eq 'ARRAY' );
26
27     foreach (@list) {
28         my $ref = ref $_;
29
30         if ( $ref eq 'HASH' or $ref eq 'ARRAY' ) {
31             print $padded. "recursing $ref($_).\n";
32             &tree( $pad + 2, $ref, $_ );
33         }
34         elsif ( $ref eq '' ) {
35             $scalar++;
36             $size += length($_);
37         }
38     }
39     print $padded. "scalars $scalar, size $size\n";
40 }
41
42 sub vartree {
43     my ( $package, $packname ) = @_;
44     my $symname;
45
46     # scalar.
47     foreach $symname ( sort keys %$package ) {
48         local *sym = $$package{$symname};
49         next unless ( defined $sym );
50         print "scalar => $symname = '$sym'\n";
51     }
52
53     # array.
54     foreach $symname ( sort keys %$package ) {
55         local *sym = $$package{$symname};
56         next unless ( defined @sym );
57         print "\@$symname\n";
58         &tree( 2, "ARRAY", $symname );
59     }
60
61     # hash.
62     foreach $symname ( sort keys %$package ) {
63         local *sym = $$package{$symname};
64         next unless ( defined %sym );
65         print "\%$symname\n";
66         &tree( 2, "HASH", $symname );
67     }
68
69     foreach $symname ( sort keys %$package ) {
70         local *sym = $$package{$symname};
71         next unless ( defined %sym );
72         next unless ( $symname =~ /::/ );
73         next if ( $symname eq 'main::' );
74
75         print "recurse: $symname.\n";
76         &vartree( \%sym, $symname );
77     }
78
79     print "end.\n";
80 }
81
82 # vim:ts=4:sw=4:expandtab:tw=80