Perl中标量上下文中的数组

时间:2013-10-25 09:26:47

标签: perl perl-data-structures

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

示例:

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

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

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

1 个答案:

答案 0 :(得分:1)

Perl使用上下文,其他语言使用函数来获取某些信息或在不同类型之间转换值。在perldata手册页(man perldata)中详细解释了上下文的概念。

在Perl中,相同的数据在不同的上下文中看起来不同。数组看起来像列表上下文中的元素列表,而它看起来像标量上下文中的元素数。

它在标量上下文中怎么可能看起来?

  • 它可能是数组的第一个元素。这可以通过my ($x) = @arr;my $x = shift @arr;my $x = $arr[0];完成。
  • 它可能是数组的最后一个元素。这可以通过my ($x) = reverse @arr;my $x = pop @arr;my $x = $arr[-1];完成。

我无法想到从数组中制作标量的任何其他合理方法。显然使用数组长度作为其标量值比这两个更好,因为它是数组的某种全局属性,而这两个是相当本地的。当您在标量上下文中查看数组的典型用法时,这也是非常合乎逻辑的:

die "Not enough arguments" if @ARGV < 5;

您可以非常自然地阅读<,因为“小于”。