]> git.donarmstrong.com Git - infobot.git/blob - scripts/vartree.pl
* Add vim formatting comments ( # vim:ts=4:sw=4:expandtab:tw=80 )
[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
18 sub tree {
19     my ($pad, $ref, $symname) = @_;
20     my $padded = " " x $pad;
21     my @list;
22     my $scalar = 0;
23     my $size   = 0;
24
25     @list = keys %{$symname} if ($ref eq 'HASH');
26     @list = @{$symname} if ($ref eq 'ARRAY');
27
28     foreach (@list) {
29         my $ref = ref $_;
30
31         if ($ref eq 'HASH' or $ref eq 'ARRAY') {
32             print $padded."recursing $ref($_).\n";
33             &tree($pad+2, $ref, $_);
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