6

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

$array[-1] $array[-2] $array[-3]
-3$array[-5]

4

3 に答える 3

9

それを読み取った場合、結果は読み取りと同じです$array[5]— 値は存在せず、 undef が出力されます。端から左に抜けるのも右に抜けるのも同じです。

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

于 2013-04-09T20:02:17.770 に答える
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
于 2013-04-09T21:20:45.577 に答える
0

できません。エラーがスローされます。

作成不可能な配列値の変更が試行されました。添え字 -2

于 2013-04-09T19:57:39.967 に答える