数组内部的数组插值

时间:2012-09-26 05:32:15

标签: arrays perl

当我尝试在数组中打印特定元素时,我错误地在[]内输入了相同数组的名称作为元素,并获得了一些输出,如图所示。我认为它占用了数组的大小并打印了多少个字符,这被输出证明是错误的。

@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.

现在我尝试在第二个数组中放入一个数字,而不是再次给出数组名称,如下所示。

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

输出为

 1 2 3

但这次没有警告信息。

它试图打印什么?这种行为背后的原因是什么?

2 个答案:

答案 0 :(得分: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的元素。第十一个元素的值为“12”。

答案 1 :(得分: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]。由于内部数组的值之一为12,而外部数组的索引不为12,因此会得到未定义的值警告。