2013-04-09 39 views
6

我是Perl的新手,我正在阅读有关数组的内容。
据我所知,阵列根据需要自动扩展(酷!)
但我也读到,我们可以使用负指标来以相反的顺序访问数组。
例如可以访问3个元素的阵列:
$array[0] $array[1] $array[2]

$array[-1] $array[-2] $array[-3](以相反顺序)。
我的问题是什么发生的值小于-3例如$array[-5]
数组是否扩展或什么?Perl中的数组和负指数

+6

测试出来。这些类型的问题对你自己来说是有好处的 – chrsblck 2013-04-09 19:48:02

+3

你为什么不试试呢? – marcadian 2013-04-09 19:48:04

+0

我可以试试看,但我想了解内存模型,如果这在Perl中有意义。如果不是,我可以简单地关闭 – Cratylus 2013-04-09 19:49:19

回答

9

如果你读它,结果是一样的阅读$array[5] - 值不存在,你会得到一个undef。走到最后的左边,并走到最后的权利是一样的。

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

+0

我有一个特殊的Perl版本,我的数组首先面向零端。他们只能自动离开我。 – Borodin 2013-04-09 22:50:07

0

你不能,它抛出的错误:

试图修改非可创建数组值的,标-2

2

如果您读取该值,则会得到一个undef值。

use strict; 
use warnings; 

my @l = qw(A B C); 
print $l[-4]; 

输出到标准错误(程序继续运行):

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 
+1

'$ ['已弃用;不要使用它。 – ysth 2013-04-09 22:37:21

+1

是的,它已被弃用。我只表现为一种香料。 :) – TrueY 2013-04-09 23:33:01