在Perl中,如果你将一个数组赋给一个标量,你将获得该数组的长度。
示例:
my @arr = (1,2,3,4);
my $x = @arr;
现在,如果您检查$x
的内容,您会发现$x
包含@arr
数组的长度。
我想知道Perl之所以这样做的原因。它背后的原因是什么?我尝试了我的水平,但找不到任何好的理由。那么,有人能帮我理解正在发生的场景背后的原因吗?
答案 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;
您可以非常自然地阅读<
,因为“小于”。