Я сделал вот так:
sub doRDKFH {
my ($hr,$k)=@_;
if (ref($hr) eq 'ARRAY') {
map {doRDKFH($_,$k)} grep {ref($_) eq 'HASH' or ref($_) eq 'ARRAY'} @{$hr}
} else {
delete @{$hr}{ref($k)?@$k:($k)};
map {doRDKFH($_,$k)} grep {ref($_) eq 'HASH' or ref($_) eq 'ARRAY'} values $hr
}
}
Предложите варианты @более_рациональной{быстрой,короткой} функции?
UP: Обновил для случая того, чтобы хэши с вложенными списками и списки с вложенными хэшами тоже обрабатывались