my $hashvar = { emp => {}, hemp => { splay => {}, hay => { go => 1, ho => {}, }, tay => [], may => [ 'way' ], }, }; sub HashClean { my ($hashref) = @_; if (ref ($hashref) eq "HASH") { foreach my $key (keys %$hashref) { print "W $key\n"; if (ref ($hashref->{$key}) eq "HASH") { print "HR $key\n"; if (keys (%{$hashvar->{$key}})) { print "HC $key\n"; &HashClean($hashref->{$key}); }#if else { print "HD $key\n"; delete $hashref->{$key}; }#else }#if if (ref $hashref->{$key} eq "ARRAY") { print "AR $key\n"; if ($#{$hashvar->{$key}}) { print "AC $key $#{$hashvar->{$key}}\n"; &HashClean($hashref->{$key}); }#if else { print "AD $key\n"; delete $hashref->{$key}; }#else }#if }#foreach }#if else { foreach my $key (@$hashref) { if (ref ($hashref->[$key]) eq "HASH") { if (keys (%{$hashvar->[$key]})) { &HashClean($hashref->[$key]); }#if else { # delete $hashref->[$key]; }#else }#if if (ref $hashref->[$key] eq "ARRAY") { if ($#{$hashvar->[$key]}) { &HashClean($hashref->[$key]); }#if else { # delete $hashref->[$key]; }#else }#if }#foreach }#else }#sub print Data::Dumper->Dump([$hashvar],[qw (::hashvar)]); &HashClean($hashvar); print Data::Dumper->Dump([$hashvar],[qw (::hashvar)]);
$::hashvar = { 'hemp' => { 'may' => [ 'way' ], 'tay' => [], 'hay' => { 'ho' => {}, 'go' => 1 }, 'splay' => {} }, 'emp' => {} }; W hemp HR hemp HC hemp W may AR may AC may -1 W tay AR tay AC tay -1 W hay HR hay HD hay W splay HR splay HD splay W emp HR emp HD emp $::hashvar = { 'may' => [], 'hemp' => { 'may' => [ 'way' ], 'tay' => [] }, 'hay' => {}, 'tay' => [], 'splay' => {} };
sub HashClean { my ($hashref) = @_; my $deletes = 0; if (ref ($hashref) eq "HASH") { foreach my $key (keys %$hashref) { if (ref ($hashref->{$key}) eq "HASH") { if (keys (%{$hashref->{$key}})) { $deletes += &HashClean($hashref->{$key}); }#if else { delete $hashref->{$key}; $deletes++; }#else }#if if (ref $hashref->{$key} eq "ARRAY") { if ($#{$hashref->{$key}} >= 0) { $deletes += &HashClean($hashref->{$key}); }#if else { delete $hashref->{$key}; $deletes++; }#else }#if }#foreach }#if else { my $arraynum = 0; for (my $arraynum = 0; $arraynum <= $#$hashref; $arraynum++) { if (ref ($hashref->[$arraynum]) eq "HASH") { if (keys (%{$hashref->[$arraynum]})) { $deletes += &HashClean($hashref->[$arraynum]); }#if else { delete $hashref->[$arraynum]; $deletes++; }#else }#if if (ref $hashref->[$arraynum] eq "ARRAY") { if ($#{$hashref->[$arraynum]} >= 0) { $deletes += &HashClean($hashref->[$arraynum]); }#if else { delete $hashref->[$arraynum]; $deletes++; }#else }#if }#for }#else &HashClean($hashref) if $deletes; return $deletes; }#sub
In reply to Variable scoping when a sub calls itself?? by cosmicperl
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |