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

Perl 为什么不给出数组的第二个最后元素?,perl,Perl,我的直觉理解是上面的代码应该打印@some_数组中的最后第二个元素 但事实并非如此。它会打印我无法理解的内容。它会打印数组中倒数第二个元素: print $some_array[$#some_array - 1]; 这里,$#nums给出数组的最后一个索引(在本例中,4-数组是从零开始的),因此$#nums-1给出数组元素3 更常见的书写方式是: $array[-2]some_array[$#some_array-1]的行为取决于@some_array有多少个元素 如果@some_array有

我的直觉理解是上面的代码应该打印@some_数组中的最后第二个元素


但事实并非如此。它会打印我无法理解的内容。

它会打印数组中倒数第二个元素:

print $some_array[$#some_array - 1];
这里,
$#nums
给出数组的最后一个索引(在本例中,4-数组是从零开始的),因此
$#nums-1
给出数组元素3

更常见的书写方式是:


$array[-2]

some_array[$#some_array-1]的行为取决于
@some_array
有多少个元素

如果
@some_array
有2个或多个元素(
scalar@array>=2
,或等效的
$#array>=1
),则您的语句:

my @nums = qw(a b c d e);
print "$nums[$#nums-1]\n"; # prints 'd'
应该能正常工作。假设数组有10个元素,然后打印倒数第二个元素

如果
@some_array
只有一个元素,那么
$\some_array==0
,您将打印“
-1
th”元素。负数组索引被特别处理:
-1
给出数组的最后一个元素,
-2
倒数第二个元素,依此类推。如果您的目标是打印数组的倒数第二个元素,则应该使用此功能


如果
@some\u array
为空(
scalar@some\u array==0
$some\u array==1
),则您的语句将尝试打印
$some\u array[-2]
,但该语句不存在,从而产生错误消息。

它打印的是什么?它对我很有用:
perl-e“@a=(1,2,3,4,5,6);print$a[$#a-1];”
prints
5
你在某些事情上错了。它打印的是什么?请包括您设置
@some_array
的行好吗?“您无法理解的东西”是否像其他人指出的那样,看起来像数组(0x012345),您所拥有的是正确的。或者,也可以使用负索引位置访问相对于数组末尾的数组项。例如:
print$some_数组[-2]
print $some_array[$#some_array - 1];