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