print $some_array[$#some_array - 1];
我直观的理解是上面的代码应该打印@some_array中的第二个最后一个元素。
但实际上并非如此。它打印出一些我无法理解的东西。
答案 0 :(得分:3)
它会打印数组中倒数第二个元素:
my @nums = qw(a b c d e);
print "$nums[$#nums-1]\n"; # prints 'd'
这里,$#nums
给出了数组的最后一个索引(在这种情况下为4 - 数组从零开始),因此$#nums - 1
给出了数组元素3.
更常见的写作方式是:
$array[-2]
答案 1 :(得分:2)
$some_array[$#some_array - 1]
的行为取决于@some_array
有多少元素。
如果@some_array
有2个或更多元素(scalar @array >= 2
或等效$#array >= 1
),那么您的陈述:
print $some_array[$#some_array - 1];
应该正常工作。假设数组有10个元素,然后是$#some_array == 9
,你将打印$some_array[8]
,倒数第二个元素。
如果@some_array
只有一个元素,那么$#some_array == 0
,您将打印“-1
th”元素。特别对待负数组索引:-1
为您提供数组的 last 元素,从倒数第二个为-2
,依此类推。如果您的目标是打印数组的倒数第二个元素,那么您应该使用此功能。
如果@some_array
为空(scalar @some_array == 0
,$#some_array == -1
),那么您的语句将尝试打印不存在的$some_array[-2]
,导致错误信息。