列表是一个非常通用的词。您可能指的是列表运算符或列表值。
代码中没有逗号,因此没有列表运算符。
代码中没有列表上下文,因此没有列表值。
因此,其中没有列表
my $s = ();
括号从不创建列表
(仅在赋值运算符的 LHS 上间接进行。)
what do we call the empty list in scalar context
Perl 称其为“存根”(如下所示),这确实是它的本质。它是代码中的一个占位符,实际上不允许放置任何内容。
存根由“空括号”表示,因此这是它的另一个名称。
我称之为糟糕的代码。如果你想分配undef
, 分配undef
.
There is a lie that a list in scalar context yields the last element of the list.
不,确实如此。列表值不能存在于标量上下文中,因此只剩下列表运算符。
列表运算符也称为逗号运算符,返回标量上下文中列表的最后一个元素。
比较以下内容。没有提及列表:
>perl -MO=Concise -e"my $s = ();"
6 <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
2 <;> nextstate(main 1 -e:1) v:{ ->3
5 <2> sassign vKS/2 ->6
3 <0> stub sP ->4
4 <0> padsv[$s:1,2] sRM*/LVINTRO ->5
-e syntax OK
有提到一个列表
>perl -MO=Concise -e"my @a = ();"
7 <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
2 <;> nextstate(main 1 -e:1) v:{ ->3
6 <2> aassign[t2] vKS ->7
- <1> ex-list lK ->4
3 <0> pushmark s ->4
- <0> stub lP ->-
- <1> ex-list lK ->6
4 <0> pushmark s ->5
5 <0> padav[@a:1,2] lRM*/LVINTRO ->6
-e syntax OK
...这与括号无关
>perl -MO=Concise -e"my @a = 's';"
8 <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
2 <;> nextstate(main 1 -e:1) v:{ ->3
7 <2> aassign[t2] vKS ->8
- <1> ex-list lK ->5
3 <0> pushmark s ->4
4 <$> const[PV "s"] s ->5
- <1> ex-list lK ->7
5 <0> pushmark s ->6
6 <0> padav[@a:1,2] lRM*/LVINTRO ->7
-e syntax OK