3

配列内の特定の要素を印刷しようとしたときに、同じ配列の名前を [ ] 内に要素として誤って入力し、示されているような出力を得ました。配列のサイズを取得してその文字数を出力していると思いましたが、これは出力によって間違っていることが証明されました。

@array = (0..10, 12);

print "@array[@array]";

版画

 Use of uninitialized value in join or string at
 /home/VAR121/Program/Practise_Perl/Arrays.pl line 9.
 0 1 2 3 4 5 6 7 8 9 10

私は一歩先に進み、以下に示すようにコードを編集しました

print "@array[@array[@array]]";

output as: `0 1 2 3 4 5 6 7 8 9 10 0`  Use of uninitialized value in join or string at
 /home/VAR121/Program/Practise_Perl/Arrays.pl line 9.

ここで、以下のように配列名を再度指定する代わりに、2 番目の配列内に数値を入れようとしました。

print "@array[@array[1,2,3]]";

として出力

 1 2 3

しかし、今回は警告メッセージはありません。

何を印刷しようとしていますか?この動作の背後にある理由は何ですか。

4

2 に答える 2

9

配列スライスを作成しています。配列に要素 0、1、2、3、4、5、6、7、8、9、10、12 が含まれていることを理解することから始めます。

これは合計 12 個の要素です (値 11 はありませんが、インデックス 11 に値 12 を格納しています)。

この構成を使用する場合:@array[@array]スライスを取得し、インデックス 0、1、2、3、4、5、6、7、8、9、10、および 12 に格納されている値を要求しています。要素はありません。配列のインデックスは 12 です。11 番目の要素の値は "12" です。

于 2012-09-26T05:43:11.757 に答える
4

@array[]は配列スライス表記です。例えば:

my @array = (qw/apple banana cucumber date/)

@array[1,2](バナナ、キュウリ) (@array のインデックス 1 とインデックス 2) のリストを返します。

ここ@array[@array]で、内側の @array の値を取得し、それらを外側の @array のインデックスとして使用しようとします。あなたの例では、@array[@array] は @array[0..10, 12] と同等です。内側の配列の値の 1 つが 12 で、外側の配列には 12 のインデックスがないため、未定義値の警告が表示されます。

于 2012-09-26T05:44:00.193 に答える