Arrays and negative indexes in Perl
我是Perl的新手,我在读数组。据我所知,数组会根据需要自动扩展(酷!)但我也读到了,我们可以使用负索引以相反的顺序访问数组。例如,三个元素的数组可以访问为:$array[0] $array[1] $array[2]或$array[-1] $array[-2] $array[-3](顺序相反)。我的问题是,对于小于-3的值,如$array[-5],会发生什么?数组是展开的还是什么?
- 测试一下。这些类型的问题有助于你自己解决问题。
- 你为什么不试试呢?
- 我可以尝试一下,但是我正在尝试理解内存模型,如果这在Perl中有意义的话。如果没有,我可以结束这个问题。
- 简单地说:亡灵就是你得到的
- 你可以用一行程序来测试它,但是一定要使用-w,这样所有的问题都会暴露出来。(使用脚本语言的一个原因是因为它很容易测试东西。)
如果你读了它,结果和读$array[5]的结果是一样的——这个值不存在,你得到一个undef。从末端向左和从末端向右是一样的。
如果你写它,你会得到一个错误。数组只能自动向右扩展。
- 我有一个特殊的Perl构建,在这个构建中,我的数组首先面向我的零结束。它们只能自动地从我身上伸展开。
如果读取值,则会得到一个undef值。
1 2 3 4 5
| use strict ;
use warnings ;
my @l = qw(A B C );
print $l[-4]; |
输出到stderr(程序继续运行):
1
| Use of uninitialized value in print at ./x .pl line 7. |
或:
输出:
如果要为其指定值,则会得到一个错误:
1 2
| my @l = qw(A B C );
$l[-4] ="d"; |
输出(程序退出):
1
| Modification of non-creatable array value attempted, subscript -4 at ./x.pl line 7. |
实际上间隔可以修改。因此数组可以启动任何值,而不仅仅是0。
1 2 3 4 5 6
| my @l = qw(A B C );
$[ = -4; # !!! Deprecated
print $l[-4],"
";
print $l[-3],"
"; |
输出:
- $[已弃用,请勿使用。
- 是的,它被否决了。我只是作为一种香料出现。:)
不能,它会抛出错误:
尝试修改不可创建的数组值,下标-2