嵌套散列/数组中的Perl Grep问题

时间:2012-11-27 10:27:30

标签: perl

我想删除值中包含“local”字符串的值。这是我的哈希输出(print Dumper ($hash)):

$VAR1 = {
          'FARM_03' => [
                           'nfs01',
                           'nfs02',
                           'nfs03',
                           'localvmfs',
                           'localvmfs'
                           ],
          'FARM_07' => [
                           'nfs01',
                           'localvmfs',
                           'localvmfs'
                           ],
          'FARM_11' => [
                           'nfs01',
                           'localvmfs',
                           'localvmfs'
                           ]
        };

因此,我在脚本中编写了以下代码,以省略“本地”条目:

foreach my $key ( keys %$hash )
{
    @{ $hash->{key} } = grep { !/local/i } @{ $hash->{key} };
}

,这是在grep命令上面运行后的输出:

$VAR1 = {
          'FARM_03' => [
                           'nfs01',
                           'nfs02',
                           'nfs03',
                           'localvmfs',
                           'localvmfs'
                           ],
          'FARM_07' => [
                           'nfs01',
                           'localvmfs',
                           'localvmfs'
                           ],
          'FARM_11' => [
                           'nfs01',
                           'localvmfs',
                           'localvmfs'
                           ]
          'key' => []
    };

它不会删除“本地”条目,也会添加新字段'key' => []

你能告诉我我的grep声明有什么问题。

感谢。

1 个答案:

答案 0 :(得分:4)

您的{key}代表{$key}(两次)。