快速过滤哈希的perl哈希值

时间:2010-09-06 07:35:22

标签: perl hash filter

我有以下哈希的perl哈希:

$VAR1 = {
          'ID_1' => {
                           'FILE_B' => '/path/to/file/file1',
                           'FILE_C' => '/path/to/file/file2',
                           'FILE_A' => '/path/to/file/file3'
                         },
          'ID_2' => {
                           'FILE_B' => '/path/to/file/file4',
                           'FILE_A' => '/path/to/file/file5'
                         },
          'ID_3' => {
                           'FILE_B' => '/path/to/file/file6',
                           'FILE_A' => '/path/to/file/file7'
                         }
          ...                       
}

我想获得主散列中已定义FILE_C的所有成员键的列表。在示例中,这将仅返回ID_1

我知道如何在一个繁琐的循环中执行此操作(迭代所有键,检查是否定义了FILE_C,如果是这样 - 将键推送到数组,最后返回此数组),但我有一种感觉单线或甚至是这个功能...

1 个答案:

答案 0 :(得分:15)

是的,perl具有grep功能:

my @keys = grep { defined $hash{$_}{FILE_C} } keys %hash;