繁体   English   中英

Perl中标量上下文中的数组

[英]Array in scalar context in Perl

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

例:

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

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

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

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;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM