Arrays Perl中的数组和负索引
我是Arrays Perl中的数组和负索引,arrays,perl,Arrays,Perl,我是Perl方面的新手,我正在阅读有关数组的书籍。 据我所知,阵列会根据需要自动扩展(很酷!) 但我也读到,我们可以使用负索引以相反顺序访问数组。 例如,一个由3个元素组成的数组可以访问为: $array[0]$array[1]$array[2] 或 $array[-1]$array[-2]$array[-3](按相反顺序)。 我的问题是小于-3的值会发生什么情况,例如$array[-5]? 数组是否扩展了?如果不能,它会抛出错误: 试图修改不可创建的数组值,下标-2如果您读取它,结果与读取$a
Perl
方面的新手,我正在阅读有关数组的书籍。据我所知,阵列会根据需要自动扩展(很酷!)
但我也读到,我们可以使用负索引以相反顺序访问数组。
例如,一个由3个元素组成的数组可以访问为:
$array[0]$array[1]$array[2]
或
$array[-1]$array[-2]$array[-3]
(按相反顺序)。我的问题是小于
-3
的值会发生什么情况,例如$array[-5]
?数组是否扩展了?如果不能,它会抛出错误:
试图修改不可创建的数组值,下标-2如果您读取它,结果与读取
$array[5]
相同-该值不存在,您会得到一个未定义的值。从一端向左走和从一端向右走是一样的
如果你写了它,你会得到一个错误。数组只能自动向右扩展。如果读取值,则会得到一个未定义的值
use strict;
use warnings;
my @l = qw(A B C);
print $l[-4];
输出到stderr(程序继续运行):
或:
输出:
undef
A
B
如果要为其赋值,则会出现错误:
my @l = qw(A B C);
$l[-4] = "d";
输出(程序出口):
实际上,间隔是可以修改的。因此,数组可以启动任何值,而不仅仅是0
my @l = qw(A B C);
$[ = -4; # !!! Deprecated
print $l[-4], "\n";
print $l[-3], "\n";
输出:
undef
A
B
测试一下。这些类型的问题有助于你自己解决问题,为什么不试试呢?我可以试试,但我正在尝试理解内存模型,如果这在Perl中有意义的话。如果没有,我可以简单地结束这个问题:undef是你得到的,你可以用一行代码来测试它,但一定要使用-w,这样所有的问题都会暴露出来。(使用脚本语言的一个原因是因为它很容易测试东西。)
$[
不推荐使用;不要使用它。我有一个特殊的Perl版本,其中我的数组首先面对我的零端。它们只能自动扩展到远离我的地方。
A
B