什么$ #vvv--;做Perl中的哈希?

时间:2012-05-02 23:57:19

标签: arrays perl hash key

这是整个剧本,对我来说一些神秘的原因输出“642”

#!usr/bin/perl 
%vvv = (1,2,3,4,5,6);
$#vvv--;
%vvv = reverse %vvv;
print keys %vvv, "\n";

最后一个声明中的“键”是做什么的?谢谢你的时间。我很着急,没有足够的时间做我的研究。所以我再次感谢你的投入。

2 个答案:

答案 0 :(得分:20)

您应始终使用

运行脚本
use strict;
use warnings;

如果有,你会注意到一个错误:

Global symbol "@vvv" requires explicit package name at ...

这意味着$#vvv指的是数组@vvv的最大索引,而不是散列。在perl中,@vvv%vvv是两个独立的变量。所以@vvv%vvv无关,而且该操作没有任何用处。

编写代码的人可能一直在想的是截断数组的方法:

my @array = 1 .. 6; # 1,2,3,4,5,6 but written as a range
$#array--;          # lower maximum index by 1
print "@array";     # prints "1 2 3 4 5"

然而,这不是希望哈希。

正如Friar所解释的那样,reverse是一种交换哈希键和值的方法。当在字符串上使用时,它会反转字符串,例如“foobar” - > “raboof”,但是当在列表中使用时,它会反转它,因此1,2,3,4,5,6变为6,5,4,3,2,1

答案 1 :(得分:6)

$#vvv--看起来像是评论。发生的事情是哈希,即偶数编号的元素数组,只是反向。所以它来自:

%vvv = (
    1 => 2,
    3 => 4,
    5 => 6
);

为:

%vvv = (
    6 => 5,
    4 => 3,
    2 => 1
);

因此,当打印密钥时,它会抓取642或散列的新的当前密钥。