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