2010-09-06 15 views
6

Ich habe ein Perl-Hashes von Hashes wie folgt aus:schnell ein Perl-Hash von Hashes filtern

$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' 
         } 
      ...      
} 

Ich mag würde eine Liste aller Schlüssel der Mitglieder in der Haupt-Hash erhalten, die FILE_C definiert haben. Im Beispiel wird nur ID_1 zurückgegeben.

Ich weiß, wie man dies in einer mühsamen Schleife (Iteration aller Schlüssel, überprüfen, ob FILE_C definiert ist, wenn ja - Drücken des Schlüssels zu einem Array, schließlich dieses Array), aber ich habe das Gefühl, es gibt eine einzige - Liner oder sogar eine Funktion für diese ...

Antwort

15

Yep, perl hat die grep Funktion:

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