【问题标题】:Array in scalar context in PerlPerl中标量上下文中的数组
【发布时间】:2013-10-25 09:26:47
【问题描述】:

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

例子:

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

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

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

【问题讨论】:

标签: perl perl-data-structures


【解决方案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;

您可以很自然地将&lt; 解读为“小于”。

【讨论】:

    猜你喜欢
    • 2012-05-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 2015-03-28
    相关资源
    最近更新 更多