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)]);