Perl中的数组和负索引

时间:2013-04-09 19:45:43

标签: arrays perl

我是Perl的新手,我正在阅读关于数组的内容 据我所知,阵列会根据需要自动扩展(很酷!)
但我也读到我们可以使用负索引以相反的顺序访问数组 例如。一个包含3个元素的数组可以访问为:
$array[0] $array[1] $array[2]

$array[-1] $array[-2] $array[-3](按相反顺序)。
我的问题是小于-3的值会发生什么情况,例如$array[-5]
阵列是扩展还是什么?

3 个答案:

答案 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