这是整个脚本,出于某种神秘的原因输出“642”
#!usr/bin/perl
%vvv = (1,2,3,4,5,6);
$#vvv--;
%vvv = reverse %vvv;
print keys %vvv, "\n";
最后一条语句中的“键”还有什么作用?谢谢你的时间。我只是赶时间,没有适当的时间进行研究。因此,我再次感谢您的意见。
您应该始终运行脚本
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
.
$#vvv-- 看起来像评论。发生的事情是哈希,作为偶数元素数组,只是被反转了。所以它来自:
%vvv = (
1 => 2,
3 => 4,
5 => 6
);
至:
%vvv = (
6 => 5,
4 => 3,
2 => 1
);
因此,当打印键时,它会抓取 642 个,或哈希的新的当前键。