Perl:哈希参考访问密钥数组

前端之家收集整理的这篇文章主要介绍了Perl:哈希参考访问密钥数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个似乎基本的问题,但我无法弄清楚.说我在Perl中有哈希引用.我想通过一个键数组来获取一个数组.

以下是使用哈希而不是散列引用的方法

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

my @testValues = @testHash{@testKeys};

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

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

我尝试了以下两种方式:

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

但是两者都不正确.有没有正确的方法,或者我只需要取消引用散列引用每次我想这样做?

解决方法

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

要么

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

有关更多示例,请参阅“Slices” in the perllol documentation.

“Using References” in the perlref documentation给出了一般规则.

1. Anywhere you’d put an identifier (or chain of identifiers) as part of a variable or subroutine name,you can replace the identifier with a simple scalar variable containing a reference of the correct type.

这就解释了为什么(1)工作:用简单的标量$hashRef替换了标识符testHash.

2. Anywhere you’d put an identifier (or chain of identifiers) as part of a variable or subroutine name,you can replace the identifier with a BLOCK returning a reference of the correct type.

上面的代码片段(2)几乎相同,但是有一些较大的语法.代替标识符testHash,你写一个返回一个散列引用的块,即{$hashRef}.

这里的大括号包含一个真正的块,所以你可以计算并返回一个引用,如in

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

猜你在找的Perl相关文章