6

我是新手,Perl我正在阅读有关数组的信息。
据我了解,数组会根据需要自动扩展(很酷!)
但我还读到我们可以使用负索引以相反的顺序访问数组。
例如,一个包含 3 个元素的数组可以按以下方式访问:
$array[0] $array[1] $array[2]

$array[-1] $array[-2] $array[-3] (以相反的顺序)。
我的问题是小于-3eg的值会发生什么$array[-5]
数组是扩展还是什么?

4

3 回答 3

9

如果你读它,结果和读一样$array[5]——值不存在,你得到一个 undef。向左走尽头和向右走尽头是一样的。

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

于 2013-04-09T20:02:17.770 回答
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
于 2013-04-09T21:20:45.577 回答
0

你不能,它会抛出错误:

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

于 2013-04-09T19:57:39.967 回答