在 Perl 中,如果您将一个数组分配给一个标量,您将获得该数组的长度。
例子:
my @arr = (1,2,3,4);
my $x = @arr;
现在,如果您检查 的内容$x
,您会发现$x
包含@arr
数组的长度。
我想知道 Perl 这样做的原因。背后的原因是什么?我尝试了我的水平,但找不到任何好的理由。那么,有人可以帮助我了解正在发生的幕后原因吗?
在 Perl 中,如果您将一个数组分配给一个标量,您将获得该数组的长度。
例子:
my @arr = (1,2,3,4);
my $x = @arr;
现在,如果您检查 的内容$x
,您会发现$x
包含@arr
数组的长度。
我想知道 Perl 这样做的原因。背后的原因是什么?我尝试了我的水平,但找不到任何好的理由。那么,有人可以帮助我了解正在发生的幕后原因吗?
Perl 使用上下文,而其他语言使用函数来获取一些信息或在不同类型之间转换值。perldata手册页 ( man perldata
)中详细解释了上下文的概念。
在 Perl 中,相同的数据在不同的上下文中看起来不同。数组在列表上下文中看起来像是其元素的列表,而在标量上下文中看起来像是其元素的数量。
在标量环境中它还能怎么看?
my ($x) = @arr;
ormy $x = shift @arr;
或来完成my $x = $arr[0];
。my ($x) = reverse @arr;
ormy $x = pop @arr;
或来完成my $x = $arr[-1];
。我想不出任何其他合理的方法来从数组中生成标量。显然,使用数组长度作为其标量值比这两个要好,因为它在某种程度上是数组的全局属性,而这两个是相当局部的。当您在标量上下文中查看数组的典型用法时,这也是非常合乎逻辑的:
die "Not enough arguments" if @ARGV < 5;
您可以<
很自然地阅读为“小于”。