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