【发布时间】:2019-12-11 15:04:52
【问题描述】:
如何获取匿名列表的长度?
perl -E 'say scalar ("a", "b");' # => b
我希望 scalar 在标量上下文中返回列表 - 它的长度。
为什么它返回第二个(最后一个)元素?
它适用于数组:
perl -E 'my @lst = ("a", "b"); say scalar @lst;' # => 2
【问题讨论】:
-
Re "我希望标量返回标量上下文中的列表,它是长度。",标量上下文中的列表计算为其最后一项(也在标量上下文)。换句话说,标量上下文中的
a,b,c与do { a; b; c; }相当。 -
@ikegami,我做了这个例子是为了找出括号何时形成列表以及何时用于排序优先级。但是,从您的评论中,我看到了一些东西。
my $foo = 2 * (3 + 1);。括号是否列出了单个元素(4)并在标量上下文中返回其最后一个元素 -4? -
Parens 不创建列表;他们只是改变优先级。没有列表运算符,也没有在列表上下文中评估任何内容(取决于周围代码的赋值除外)。
-
我恢复了您对该问题所做的更改,因为您从有关列表长度的问题中删除了该列表。
-
我认为您可能将“列表”的两个不同定义混为一谈。逗号运算符的一个实例(例如
"a", "b",但不是qw( a b ))可以称为列表,并且有人说运算符评估为列表并且子返回列表作为“0或更多标量”的简写(例如,"a", "b"在您的第二个 sn-p 中计算为一个列表,但不是第一个。)