Perl中的数组和负索引

Arrays and negative indexes in Perl

我是Perl的新手,我在读数组。据我所知,数组会根据需要自动扩展(酷!)但我也读到了,我们可以使用负索引以相反的顺序访问数组。例如,三个元素的数组可以访问为:$array[0] $array[1] $array[2]$array[-1] $array[-2] $array[-3](顺序相反)。我的问题是,对于小于-3的值,如$array[-5],会发生什么?数组是展开的还是什么?


如果你读了它,结果和读$array[5]的结果是一样的——这个值不存在,你得到一个undef。从末端向左和从末端向右是一样的。

如果你写它,你会得到一个错误。数组只能自动向右扩展。


如果读取值,则会得到一个undef值。

1
2
3
4
5
use strict;
use warnings;

my @l = qw(A B C);
print $l[-4];

输出到stderr(程序继续运行):

1
Use of uninitialized value in print at ./x.pl line 7.

或:

1
2
my @l = qw(A B C);
print"undef" if !defined $l[-4];

输出:

如果要为其指定值,则会得到一个错误:

1
2
my @l = qw(A B C);
$l[-4] ="d";

输出(程序退出):

1
Modification of non-creatable array value attempted, subscript -4 at ./x.pl line 7.

实际上间隔可以修改。因此数组可以启动任何值,而不仅仅是0。

1
2
3
4
5
6
my @l = qw(A B C);
$[ = -4; # !!! Deprecated
print $l[-4],"
"
;
print $l[-3],"
"
;

输出:

1
2
A
B


不能,它会抛出错误:

尝试修改不可创建的数组值,下标-2