Perl 为什么不给出数组的第二个最后元素?
我的直觉理解是上面的代码应该打印@some_数组中的最后第二个元素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有
但事实并非如此。它会打印我无法理解的内容。它会打印数组中倒数第二个元素:
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];”
prints5
你在某些事情上错了。它打印的是什么?请包括您设置@some_array
的行好吗?“您无法理解的东西”是否像其他人指出的那样,看起来像数组(0x012345),您所拥有的是正确的。或者,也可以使用负索引位置访问相对于数组末尾的数组项。例如:print$some_数组[-2]代码>
print $some_array[$#some_array - 1];