/ / Filtern Sie schnell einen Perl-Hash der Hashes - Perl, Hash, Filter

Filtern Sie schnell einen Perl Hash der Hashes - Perl, Hash, Filter

Ich habe einen Perl-Hash wie folgt:

$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 möchte eine Liste aller Schlüssel von Mitgliedern im Haupthash erhalten, die haben FILE_C definiert. Im Beispiel wird dies nur zurückgegeben ID_1.

Ich weiß, wie man das in einer mühsamen Schleife macht (wiederhole alle Schlüssel, überprüfe, ob FILE_C definiert ist, wenn ja - den Schlüssel zu einem Array drücken, schließlich dieses Array zurückgeben, aber ich habe das Gefühl, es ist ein Single-Liner oder sogar eine Funktion für diese ...

Antworten:

15 für die Antwort № 1

Ja, Perl hat das Grep Funktion:

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