为什么这不给出数组的第二个最后一个元素?

时间:2015-02-18 22:32:40

标签: perl

print $some_array[$#some_array - 1];

我直观的理解是上面的代码应该打印@some_array中的第二个最后一个元素。

但实际上并非如此。它打印出一些我无法理解的东西。

2 个答案:

答案 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] ,导致错误信息。