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

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

其他回答

使用第二种方法,加1:

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

使用int(@array),因为它威胁参数为标量。

例子:

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

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

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

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

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

数组下标从0开始。

and

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

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

打印数组大小的方法有很多种。以下是所有单词的含义:

假设数组是@arr = (3,4);

方法一:标量

这是获取数组大小的正确方法。

print scalar @arr;  # Prints size, here 2

方法二:索引号

$#arr给出数组的最后一个索引。因此,如果数组的大小为10,那么它的最后一个索引将是9。

print $#arr;     # Prints 1, as last index is 1
print $#arr + 1; # Adds 1 to the last index to get the array size

我们在这里加1,将数组视为0索引。但是,如果它不是从零开始的,这个逻辑就会失败。

perl -le 'local $[ = 4; my @arr = (3, 4); print $#arr + 1;'   # prints 6

上面的例子输出6,因为我们已经将它的初始索引设置为4。现在索引是5和6,分别是元素3和元素4。

方法3:

当数组在标量上下文中使用时,它将返回数组的大小

my $size = @arr;
print $size;   # Prints size, here 2

实际上,方法三和方法一是一样的。