当我尝试在数组中打印特定元素时,我错误地在[]内输入了相同数组的名称作为元素,并获得了一些输出,如图所示。我认为它占用了数组的大小并打印了多少个字符,这被输出证明是错误的。
@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
但这次没有警告信息。
它试图打印什么?这种行为背后的原因是什么?
答案 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,因此会得到未定义的值警告。