我是一个Perl
的新手,正在学习数组相关的内容。
我理解数组可以根据需要自动扩展(很酷!)
但我也读到我们可以使用负数索引以相反的顺序访问数组。
例如,一个由3个元素组成的数组可以被访问为:
$array [0] $array [1] $array [2]
或者
$array [-1] $array [-2] $array [-3]
(以相反的顺序)。
我的问题是对于小于-3
的值,例如$array [-5]
会发生什么?
数组会扩展吗?
我是一个Perl
的新手,正在学习数组相关的内容。
我理解数组可以根据需要自动扩展(很酷!)
但我也读到我们可以使用负数索引以相反的顺序访问数组。
例如,一个由3个元素组成的数组可以被访问为:
$array [0] $array [1] $array [2]
或者
$array [-1] $array [-2] $array [-3]
(以相反的顺序)。
我的问题是对于小于-3
的值,例如$array [-5]
会发生什么?
数组会扩展吗?
$array[5]
相同——该值不存在,您会得到undef。向左越界和向右越界是一样的。如果您读取该值,则会得到未定义的值。
use strict;
use warnings;
my @l = qw(A B C);
print $l[-4];
输出到 stderr(程序继续运行):
Use of uninitialized value in print at ./x.pl line 7.
或者:
my @l = qw(A B C);
print "undef" if !defined $l[-4];
输出:
undef
如果您想给它赋值,会出现错误:
my @l = qw(A B C);
$l[-4] = "d";
输出(程序退出):
Modification of non-creatable array value attempted, subscript -4 at ./x.pl line 7.
实际上,间隔可以被修改。因此,数组可以从任何值开始,而不仅仅是0。
my @l = qw(A B C);
$[ = -4; # !!! Deprecated
print $l[-4], "\n";
print $l[-3], "\n";
输出:
A
B
$[
已被弃用,请勿使用。 - ysth尝试修改不可创建的数组值,下标为-2