Есть код на Perl:
use strict;
use warnings;
my %hash = (
one => 1,
two => 2,
four => 4,
);
my @required_keys = qw(two three four);
my %result_hash = map { $_ => $hash{$_} if (exists $hash{$_}) } @required_keys;
use Data::Dumper;
print 'Resulting hash: ' . Dumper(\%result_hash);
И результат его выполнения: http://ideone.com/ZAVwt6
Для Ъ:
Resulting hash: $VAR1 = {
'' => 'four',
'4' => undef,
'two' => 2
};
Вопрос: откуда берётся пустая строка в ключах хеша?
P.S. Корректная работа получается таким кодом:
map { exists $hash{$_} ? ($_ => $hash{$_}) : () } @required_keys;
map { $_ => $hash{$_} } grep { exists $hash{$_} } @required_keys;
И на perldoc есть похожий пример: http://perldoc.perl.org/functions/map.html
my @squares = map { $_ > 5 ? ($_ * $_) : () } @numbers;