How does negative array index in perl works?
最近我在
1 2 3 |
它将输出打印为
我想知道,在Perl中,索引
旁白:如果我在
Can anyone please explain how does this works?
号
获取数组元素
1 | my $real_index = $index < 0 ? @array+$index : $index; |
。
或者更精确,
1 | $index += $#array+1 if $index < 0; |
有关索引的详细信息
我们前面说过数组索引是非负整数。虽然在某种程度上这是严格正确的,但是Perl允许您使用负索引方便地从数组的末尾对元素进行索引。
因此,以下内容是等效的:
1 2 | $array[ -1 ] $array[ $#array ] |
但要注意:
1 | @array[ 0 .. $#array ] |
号
不能写为:
1 | @array[ 0 .. -1 ] |
因为在这种情况下-1是……范围运算符,它不知道实际需要什么"最高索引数"。
它之所以有效,是因为它在数组的索引上下文中使用时实际上只是一个别名。
Perl数组不是C数组。它们更像Java的EDCOX1 8。这个数据结构包括一些元数据,比如数组的长度,而不仅仅是起始指针。
现在在Perl中,当数组访问代码看到一个负索引时,它会增加数组的长度:给定一个长度为
这是一个文档化的特性。(见
虽然在某种程度上这是严格正确的,但是Perl允许您使用负索引方便地从数组的末尾对元素进行索引。-1表示最后一个元素,-2表示最后一个元素的下一个元素,依此类推。为了简单化一点,-1充当