我是Perl
的新手,我正在阅读关于数组的内容
据我所知,阵列会根据需要自动扩展(很酷!)
但我也读到我们可以使用负索引以相反的顺序访问数组
例如。一个包含3个元素的数组可以访问为:
$array[0] $array[1] $array[2]
或
$array[-1] $array[-2] $array[-3]
(按相反顺序)。
我的问题是小于-3
的值会发生什么情况,例如$array[-5]
?
阵列是扩展还是什么?
答案 0 :(得分:9)
如果您阅读它,结果与阅读$array[5]
相同 - 该值不存在,您将获得一个undef。从左边走到最后走到右边都是一样的。
如果你写它,你会收到一个错误。数组只能自动扩展到右侧。
答案 1 :(得分:2)
如果您读取了值,则会得到一个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
答案 2 :(得分:0)
你不能,它会引发错误:
尝试修改非可创建的数组值,下标-2