Я искал способ сделать следующее действие, используя функцию perl map
:
учитывая хеш, я хочу извлечь пары (ключ, значение), в которых значение равно или соответствует указанному параметру.
В моем примере я хочу извлечь пары (ключ, значение), где value = failed
, но это также может быть выражение (то есть строка, начинающаяся с A, или REGEX). Поэтому в результате я хочу получить хеш, а не только таблицу ключей, соответствующих значению.
my %strings = (
bla => "success",
ble => "failed",
bli => "failed",
foo => "success",
blo => "failed",
bar => "failed",
blu => "success"
);
my %failed_s = ();
while (my ($k, $v) = each %strings) {
if ( $v eq 'failed' ) {$failed_s{$k} = $v};
};
Я попробовал несколько способов сделать это, но без больших результатов, поэтому я думаю, что я запутался в ссылках, влиянии, результатах и т. Д.
my %failed_s =
map { { $_ => $strings{$_} }
if ( $strings{$_}./failed/ ) }
keys %strings;
my %failed_s =
map { ( $strings{$_} eq 'failed') &&
($_, $strings{$_}) }
keys %strings;
print "Dumper \%failed_s: \n" . Dumper(\%failed_s);
В этом случае может быть невозможно или неэффективно использовать карту, но это поможет мне (и, возможно, другим) понять, почему.