2013-04-09 71 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