我似乎遇到了几种不同的方法来查找数组的大小。这三种方法有什么区别?

my @arr = (2);
print scalar @arr; # First way to print array size

print $#arr; # Second way to print array size

my $arrSize = @arr;
print $arrSize; # Third way to print array size

当前回答

使用第二种方法,加1:

print $#arr + 1; # Second way to print array size

其他回答

第一种和第三种方法是相同的:它们在标量上下文中计算数组。我认为这是获取数组大小的标准方法。

第二种方法实际上返回数组的最后一个索引,它(通常)与数组大小不相同。

从perldoc perldata,引用它应该是安全的:

下面这句话总是正确的: 标量(@whatever) == $#whatever + 1;

只要你不使用$#,然后神秘地增加数组的大小。

数组下标从0开始。

and

通过给数组赋值空列表(),可以将数组截断为空。以下是等价的: @whatever = (); $#whatever = -1;

这让我想到了我一直在寻找的东西即如何检测数组是否为空。我发现如果$#empty == -1;

使用第二种方法,加1:

print $#arr + 1; # Second way to print array size

例子:

my @a = (undef, undef);
my $size = @a;

warn "Size: " . $#a;   # Size: 1. It's not the size
warn "Size: " . $size; # Size: 2

使用scalar关键字查找数组的大小:

print scalar @array;

要找出数组的最后一个索引,可以使用$# (Perl默认变量)。它给出了数组的最后一个索引。当数组从0开始时,我们通过给$#加1来获取数组的大小:

print "$#array+1";

例子:

my @a = qw(1 3 5);
print scalar @a, "\n";
print $#a+1, "\n";

输出:

3

3