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 № 1Ja, Perl hat das Grep Funktion:
my @keys = grep { defined $hash{$_}{FILE_C} } keys %hash;