如何有效地从引用的哈希值和perl中的键数组中获取值数组?

J0H*_*T0R 2 arrays perl hash

我目前有一个引用的哈希和哈希包含的键数组.我想得到一个与我的数组键对应的值数组.

我知道如何在多行中执行此操作:

# 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};
}
Run Code Online (Sandbox Code Playgroud)

但是,我相信必须有一个更好的方法,不使用循环.但不幸的是,我无法弄明白.如何从引用的哈希和键数组中有效地获取值数组; 如果可能,理想情况下在一行?

mwp*_*mwp 5

容易:

my @values = @$hashRef{@keys};
Run Code Online (Sandbox Code Playgroud)

或者,在Perl 5.24+上:

my @values = $hashRef->@{@keys};
Run Code Online (Sandbox Code Playgroud)

或者,通过启用一些其他功能,在Perl 5.20+上:

use feature qw(postderef);
no warnings qw(experimental::postderef);

my @values = $hashRef->@{@keys};
Run Code Online (Sandbox Code Playgroud)

这利用了以下事实:您可以%hash使用@hash{LIST}语法获取a的多个键("切片")的值.你必须先取消引用它.有关更多信息,请参阅perldoc.