我似乎遇到了几种不同的方法来寻找一个数组的大小。这三种方法的区别是什么?
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
首先,第二个不等同于其他两个。$#array
返回数组的最后一个索引,它比数组的大小少一个。
其他两个实际上是一样的。你只是用两种不同的方法来创建标量上下文。这归结为一个可读性问题。
我个人更喜欢下面的方式。
say 0+@array; # Represent @array as a number
我觉得它比
say scalar(@array); # Represent @array as a scalar
和
my $size = @array;
say $size;
后者像这样单独看起来很清楚,但我发现,当作为其他代码的一部分时,多出来的一行就不清楚了。这对于教授@array
在标量上下文中的作用很有用,如果你想多次使用$size
的话。
这通过强制数组进入标量上下文来获得大小,在标量上下文中,它被评估为其大小。
print scalar @arr;
这是强迫数组进入标量上下文的另一种方式,因为它被分配给一个标量变量。
my $arrSize = @arr;
这就得到了数组中最后一个元素的索引,所以它实际上是大小减去1(假设索引从0开始,这在Perl中是可以调整的,尽管这样做通常是个坏主意)。
print $#arr;
最后一个例子并不适合用于获取数组的大小。如果你只想获得数组的最后一个元素,那么它就很有用。
my $lastElement = $arr[$#arr];
另外,正如你在Stack Overflow上看到的,大多数语法高亮器都不能正确处理这种结构......