我正在尝试运行此代码并输出为:
#!/usr/bin/perl
@array = (1,2,3);
$array[50] = 4;
$size = @array;
$max_index = $#array;
print "Size: $size\n";
print "Max Index: $max_index\n";
Size: 51
Max Index: 50
对此有何解释?
答案 0 :(得分:4)
在Perl中,数组是表示列表的数据结构。列表包含元素。该列表中的键称为索引。第一个索引为零(0
)。
您已使用这些索引和valus启动了数组:
index value
0 1
1 2
2 3
如果将第50个索引设置为某个值,则中间的所有其他索引将填充undef
,即未定义的值。
您已将$#array
正确识别为最大索引,或最高或最后一个索引。如果您force the array into scalar context,它会为您提供元素数量,或 size 。你也有。这将是Сухой27 said in their comment,最后一个指数减一。
如果dump out the array,您可以说明这种行为。
use strict;
use warnings;
use Data::Printer;
my @array = (1,2,3);
$array[10] = 4;
p @array;
它将输出以下内容。您再次可以看到索引从0
开始,0
和最高索引之间的每个数字都在那里。所以元素的数量总是比最后一个元素的索引少一个。
[
[0] 1,
[1] 2,
[2] 3,
[3] undef,
[4] undef,
[5] undef,
[6] undef,
[7] undef,
[8] undef,
[9] undef,
[10] 4
]
如果您来自PHP背景,这可能会令人困惑,其中数组可以包含索引或associative,但仍然可以称为 array 。在Perl中,它们被称为 hash ,它们不是有序的。
我建议您阅读Perl数据结构在perldata中的工作原理。
答案 1 :(得分:1)
您声明的实际数组是@array = (1,2,3);
,这意味着此数组现在的大小为3
。请注意,默认情况下,索引始终以0
开头。所以这里的最大索引是2
那是$array[0] = 1, $array[1] = 2, $array[2] = 3
在下一行中,您将上述数组的索引50声明为4
,这意味着现在您的数组将具有最大索引51
的总50
个值。
$array[50] = 4;
您已经声明了索引0,1,2&的值50.因此,剩余的值将指定为未定义的值。
$size = @array;
- 这里使用标量上下文来获取数组的大小。因此,您将输出print "Size: $size\n";
作为51
$max_index = $#array;
- 这里它将显示最高的索引。因此,您将输出打印"Max Index: $max_index\n";
设为50