sub deleteref { my $ref = shift; foreach my $k (keys %$ref) { if (ref($ref->{$k}) eq 'SCALAR') { delete($ref->{$k}); } elsif (ref($ref->{$k}) eq 'HASH') { deleteref($ref->{$k}); } elsif (ref($ref->{$k}) eq 'ARRAY') { undef(@{$ref->{$k}}); } elsif (ref($ref->{$k}) eq 'CODE') { delete($ref->{$k}); } elsif (ref($ref->{$k}) eq 'REF') { deleteref($ref->{$k}); } elsif (ref($ref->{$k}) eq 'LVALUE') { delete($ref->{$k}); #} elsif (ref($ref->{$k}) eq '') { } else { delete($ref->{$k}); } } undef(%$ref); }