0

所以,我对 perl 还很陌生,想了解以下代码中说明的基本概念:

while (my ($key,$val)=each%{$vec1}){
    $num += $val*($$vec2{$key} || 0);
}

其中 vec1, vec2 是关联数组。我特别想了解发生了什么:

each%{$vec1} and $$vec2{$key}

我知道这与引用/取消引用哈希有关,所以我找到了这个链接: http ://www.thegeekstuff.com/2010/06/perl-hash-reference/ ,但我真的不明白发生了什么在。

提前致谢。

4

3 回答 3

2

$vec1是对哈希的引用。%{$vec1}得到这个哈希。应用于each哈希会在后续调用中提供(键,值)对。每个

$vec2{$key}vec2是key的哈希值$key。这个值本身就是一个引用,它被附加的 $ 解引用

于 2013-03-09T08:24:19.397 回答
1

each%{$vec1}

$vec1是一个标量哈希引用。

%{$vec1}取消引用它。

最后,each%{$vec1}返回key-valuepair。


$$vec2{$key}

$key是一个key哈希$vec2

因此,$vec2{$key}应该是value关键$key

最后,$$vec2{$key}是取消引用 scalar 的引用$vec2{$key}

于 2013-03-09T08:24:01.940 回答
0

each%{$vec1}

$vect 是对哈希的引用,并each遍历哈希,因此如果使用%{$vec1}语法,则需要取消引用。each返回由哈希的下一个元素的键和值组成的 2 元素列表。

$$vec2{$key}

我们看不到 $vec2 变量的定义,以及您在其上存储的元素类型,但看起来这是一个 hash %vec2,存储对数字的标量引用

于 2013-03-09T08:26:19.160 回答