]> git.donarmstrong.com Git - infobot.git/blob - scripts/symname.pl
* Add vim formatting comments ( # vim:ts=4:sw=4:expandtab:tw=80 )
[infobot.git] / scripts / symname.pl
1 #!/usr/bin/perl -w
2
3 # hrm...
4 #use strict;
5
6 my @test;
7 my @test1;
8 my %test;
9
10 $test{'hash0r'} = 2;
11 $test{'hegdfgsd'} = 'GSDFSDfsd';
12
13 push(@test1,"Aeh.");
14 push(@test1,"Beh.");
15 push(@test1,"Ceh.");
16 push(@test1,"Deh.");
17
18 push(@test,"heh.");
19 push(@test,\%test);
20 #push(@test,\%ENV);
21 push(@test,\@test1);
22
23 print "=============start=================\n";
24 #&DumpArray(0, '@test', \@test);
25 &DumpPackage(0, 'main::', \%main::);
26
27 # SCALAR ARRAY HASH CODE REF GLOB LVALUE
28 sub DumpArray {
29  my ($pad, $symname, $arrayref) = @_;
30  my $padding = " " x $pad;
31  my $scalar = 0;
32  my $size   = 0;
33
34  print "$padding$symname\n";
35  foreach (@{$arrayref}) {
36   my $ref = ref $_;
37   if ($ref eq 'ARRAY') {
38    $size += &DumpArray($pad+1, "@" . $_, $_);
39   } elsif ($ref eq 'HASH') {
40    $size += &DumpHash($pad+1, "%" . $_, $_);
41   } else {
42    print "$padding $_ $ref\n";
43    $scalar++;
44    $size += length($_);
45   }
46  }
47  print $padding."scalars $scalar, size $size\n";
48  return $size;
49 }
50
51 sub DumpHash{
52  my ($pad, $symname, $hashref) = @_;
53  my $padding = " " x $pad;
54  my $scalar = 0;
55  my $size   = 0;
56
57  my %sym = %{$hashref};
58  my @list = sort keys %sym;
59  print "$padding$symname\n";
60
61  foreach (@list) {
62   my $ref = ref %{$symname}; #FIXME
63   $size += length($_);
64   if ($ref eq 'ARRAY') {
65    $size += &DumpArray($pad+1, "@" . $_, $_);
66   } elsif ($ref eq 'HASH') {
67    $size += &DumpHash($pad+1, "%" . $_, $_);
68   } else {
69    print "$padding $_=$sym{$_} $ref\n";
70    $scalar++;
71    $size += length($sym{$_});
72   }
73  }
74  print $padding."scalars $scalar, size $size\n";
75  return $size;
76 }
77
78 sub DumpPackage {
79  my ($pad, $packname, $package) = @_;
80  my $padding = " " x $pad;
81  my $scalar = 0;
82  my $size   = 0;
83
84  print $padding . "\%$packname\n";
85  my $symname;
86  foreach $symname (sort keys %$package) {
87   local *sym = $$package{$symname};
88   if (defined $sym) {
89    print "$padding \$$symname='$sym'\n";
90    $scalar++;
91    $size += length($sym);
92   } elsif (defined @sym) {
93    $size += &DumpArray($pad+1, $symname, \@sym);
94   } elsif (defined %sym) {
95    $size += &DumpHash($pad+1, $symname, \%sym);
96   } elsif (($symname =~ /::/) and ($symname ne 'main::')) {
97    $size += &DumpPackage($pad+1, \%sym, $symname);
98   } else {
99    print("ERROR $symname" . ref $symname . "\n");
100   }
101  }
102  print $padding."scalars $scalar, size $size\n";
103  return $size;
104 }
105
106 # vim:ts=4:sw=4:expandtab:tw=80