2013-04-09 27 views
6

私はPerlの初心者です。配列については読んでいます。
私は配列が必要に応じて自動的に展開されることを理解しています(クール!)
逆の順序で配列にアクセスするために負のインデックスを使用できることも読んでいます。
など。 3つの要素の配列は、
$array[0] $array[1] $array[2]
または
$array[-1] $array[-2] $array[-3](逆の順序)としてアクセスできます。
私の質問は-3より小さい値でどうなりますか? $array[-5]
配列が展開されていますか?Perlの配列と負のインデックス

+6

テストそれを。これらのタイプの質問は、あなた自身を解決するために良いことです – chrsblck

+3

なぜあなたはそれを試してみませんか? – marcadian

+0

私はそれを試すことができますが、私はPerlで意味がある場合、私はメモリモデルを理解しようとしています。私は質問 – Cratylus

答えて

9

あなたがそれを読めば、結果は$array[5]を読んだと同じです - 値存在していないとあなたはundefを得る。左端に行くと右端に行くのと同じです。

書き込むとエラーになります。配列は右にのみ自動拡張できます。

+0

私はPerlの特別なビルドを持っています。彼らは私から離れて自動拡張することしかできません。 – Borodin

0

あなたがすることはできません、それはエラーがスローされます:試みた非作成可能な配列値の

変更、添字-2

2

値を読み取ると、undef値が得られます。 stderrに

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

+1

はい、廃止予定です。私はスパイスとしてのみ示した。 :) – TrueY