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 中的数组和负索引的主要内容,如果未能解决你的问题,请参考以下文章