0

在 Perl 中,如果您将一个数组分配给一个标量,您将获得该数组的长度。

例子:

my @arr = (1,2,3,4);
my $x = @arr;

现在,如果您检查 的内容$x,您会发现$x包含@arr数组的长度。

我想知道 Perl 这样做的原因。背后的原因是什么?我尝试了我的水平,但找不到任何好的理由。那么,有人可以帮助我了解正在发生的幕后原因吗?

4

1 回答 1

2

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;

您可以<很自然地阅读为“小于”。

于 2013-12-27T04:11:26.143 回答