Perl:Hash ref访问键组

时间:2011-11-15 04:34:37

标签: perl hash

我有一个看似基本的问题,但我无法弄明白。假设我在Perl中有一个哈希引用。我想通过一组键获得一个值数组。

以下是它如何使用哈希,而不是哈希引用:

my %testHash = ( "a" => 1, "b" => 2, "c" => 3 );
my @testKeys = ("a", "b", "c");

my @testValues = @testHash{@testKeys};

现在假设我有一个哈希引用,

my $hashRef = {"a" => 1, "b" => 2, "c" => 3};

我尝试了以下两种方式:

my @values = @{$hashRef->{@testKeys}};
my @values = $hashRef->{@testKeys};

但两者都不正确。有没有正确的方法,或者每次我想要这样做时我只需要取消引用哈希引用?

1 个答案:

答案 0 :(得分:21)

你很亲密:

my @values = @$hashref{@testKeys};     ## (1)

my @values = @{$hashref}{@testKeys};   ## (2)

有关更多示例,请参阅"Slices" in the perllol documentation

"Using References" in the perlref documentation给出了一般规则。

  

1。在您将标识符(或标识符链)作为变量或子例程名称的一部分放置的任何地方,您可以使用包含正确类型引用的简单标量变量替换标识符。

这解释了为什么(1)有效:您用简单的标量testHash替换了标识符$hashRef

  

2。在您将标识符(或标识符链)作为变量或子例程名称的一部分放置的任何地方,您可以使用BLOCK替换标识符,返回正确类型的引用。

上面的代码段(2)几乎相同,但语法有点笨重。代替标识符testHash,编写一个块,返回对散列的引用,{$hashRef}

括号中包含真正的块,因此您可以计算并返回引用,如

push @{ $cond ? \@a1 : \@a2 }, "some value";