]> git.donarmstrong.com Git - infobot.git/blob - scripts/showvars.pl
22c55acb817cfd6900662d0554f341bc2bc31f63
[infobot.git] / scripts / showvars.pl
1 @test = ("test");
2
3 sub dumpvar {
4     ($packageName) = @_;
5     $rPackage = \%{"${packageName}::"};  # Get a reference to the appropriate symbol table hash.
6     $, = " "    ;
7     while (($varName, $globValue) = each %$rPackage) {
8         last if ($varName eq "main::");
9         print "$varName ============================= \n";
10         *var = $globValue;
11         if (defined ($var)) {
12             print "\t \$$varName = '$var' \n";
13         }
14         if (defined (@var)) {
15             pretty_print(@var);
16 ###         print "\t \@$varName @var \n";
17         }
18         if (defined (%var)) {
19             pretty_print(%var);
20 ###         print "\t \%$varName ",%var," \n";
21         }
22     }
23 }
24
25 dumpvar("main");
26
27 $level = -1; # Level of indentation
28
29 sub pretty_print {
30     my $var;
31     foreach $var (@_) {
32         if (ref ($var)) {
33             print_ref($var);
34         } else {
35             print_scalar($var);
36         }
37     }
38 }
39
40 sub print_scalar {
41     ++$level;
42     print_indented ($_[0]);
43     --$level;
44 }
45
46 sub print_ref {
47     my $r = $_[0];
48     if (exists ($already_seen{$r})) {
49         print_indented ("$r (Seen earlier)");
50         return;
51     } else {
52         $already_seen{$r}=1;
53     }
54     my $ref_type = ref($r);
55     if ($ref_type eq "ARRAY") {
56         print_array($r);
57     } elsif ($ref_type eq "SCALAR") {
58         print "Ref -> $r";
59         print_scalar($$r);
60     } elsif ($ref_type eq "HASH") {
61         print_hash($r);
62     } elsif ($ref_type eq "REF") {
63         ++$level;
64         print_indented("Ref -> ($r)");
65         print_ref($$r);
66         --$level;
67     } else {
68         print_indented ("$ref_type (not supported)");
69     }
70 }
71
72 sub print_array {
73     my ($r_array) = @_;
74     ++$level;
75     print_indented ("[ # $r_array");
76     foreach $var (@$r_array) {
77         if (ref ($var)) {
78             print_ref($var);
79         } else {
80             print_scalar($var);
81         }
82     }
83     print_indented ("]");
84     --$level;
85 }
86
87 sub print_hash {
88     my($r_hash) = @_;
89     my($key, $val);
90     ++$level;
91     print_indented ("{ # $r_hash");
92     while (($key, $val) = each %$r_hash) {
93         $val = ($val ? $val : '""');
94         ++$level;
95         if (ref ($val)) {
96             print_indented ("$key => ");
97             print_ref($val);
98         } else {
99             print_indented ("$key => $val");
100         }
101         --$level;
102     }
103     print_indented ("}");
104     --$level;
105 }
106
107 sub print_indented {
108     $spaces = ":  " x $level;
109     print "${spaces}$_[0]\n";
110 }