Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Perl中的数组和负索引_Arrays_Perl - Fatal编程技术网

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