我目前有一个引用的哈希和一个哈希包含的键数组。我想得到一个与我的数组键对应的值数组。
我知道如何在多行中执行此操作:
# Getting hash reference and array of keys.
my $hashRef = {
one => 'foo',
two => 'bar',
three => 'baz'
};
my @keys = ('one', 'three');
# Getting corresponding array of values.
my @values;
foreach my $key (@keys) {
push @values, $hashRef->{$key};
}
但是,我认为必须有一种更好的方法来避免使用循环。但不幸的是,我无法弄明白。我怎样才能有效率 从引用的哈希和键数组中获取值数组;理想情况下,尽可能在一行?
答案 0 :(得分:5)
轻松:
my @values = @$hashRef{@keys};
或者,在Perl 5.24 +上:
my @values = $hashRef->@{@keys};
或者,通过启用一些其他功能,在Perl 5.20+上:
use feature qw(postderef);
no warnings qw(experimental::postderef);
my @values = $hashRef->@{@keys};
这利用了以下事实:您可以使用%hash
语法获取@hash{LIST}
的多个键("切片")的值。你必须先取消引用它。有关详细信息,请参阅perldoc。