快速过滤哈希的perl哈希值

Dav*_*d B 6 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'
                         }
          ...                       
}
Run Code Online (Sandbox Code Playgroud)

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

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

Eug*_*ash 15

是的,perl有grep功能:

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