删除多维哈希 (perl) 中的每个最终值



我有一个多维哈希(维度的数量会有所不同),其中每个值要么是一个简单的标量值,要么是对另一个哈希的引用。

有没有一种好方法可以删除每个最终值,保留指向其他哈希的元素?基本上,把骨架上的肉都拿下来。

我怀疑有很好的模块可以帮助解决这个问题,可能是几个,但是在Perl中遍历数据结构时,我总是很难选择一个,而且问题一开始就不是很复杂。所以这里是"手工"完成的:

sub prune {
  my ($href) = @_;
  while (my ($key, $value) = each %$href) {
    if (ref $value eq 'HASH') {
      prune($value);
    } else {
      delete $href->{$key};
    }
  }
}

你需要编写自己的递归函数。像这样的东西(我还没有测试过):

sub cleanHash($)
{
    my $hash = $_[0];
    foreach my $k ( keys( %$hash ) )
    {
        if( ref( $hash->{$k} ) eq 'HASH' )
        {
            cleanHash( $hash->{$k} );
        }
        else
        {
            delete( $hash->{$k} );
        }
    }
} # END cleanHash
my %h;
....
cleanHash( %h );

最新更新