Perl 中的数组和负索引

Posted

技术标签:

【中文标题】Perl 中的数组和负索引【英文标题】:Arrays and negative indexes in Perl 【发布时间】:2013-04-01 10:11:34 【问题描述】:

我是Perl 的新手,我正在阅读有关数组的内容。 据我了解,数组会根据需要自动扩展(酷!) 但我也读到我们可以使用负索引以相反的顺序访问数组。 例如。可以通过以下方式访问 3 个元素的数组:$array[0] $array[1] $array[2]$array[-1] $array[-2] $array[-3](倒序)。 我的问题是小于-3 的值会发生什么情况@ 例如$array[-5]? 数组是扩展还是什么?

【问题讨论】:

测试一下。这些类型的问题有利于你自己解决 你为什么不试试呢? 我可以尝试一下,但我正在尝试理解内存模型,如果这在 Perl 中有意义的话。如果不是,我可以关闭问题 简单地说:undef 就是你得到的 你可以用一个衬里来测试它,但一定要使用 -w 以便发现所有问题。 (使用脚本语言的一个原因是因为它很容易测试。) 【参考方案1】:

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

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

【讨论】:

我有一个特殊的 Perl 版本,我的数组首先面对我的是零端。它们只能自动从我身边延伸出去。【参考方案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

【讨论】:

$[ 已弃用;不要使用它。【参考方案3】:

你不能,它会抛出错误:

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

【讨论】:

以上是关于Perl 中的数组和负索引的主要内容,如果未能解决你的问题,请参考以下文章

关联数组VS索引数组

Perl学习

Perl Learning 5 Hash

hash 在 perl 中的用法(转载)

Perl 在生信中的应用 | 3. 数组

JavaScript之数组类数组字符串新方法atarguments