为什么“?:”运算符不能 return 列表?

Why "?:" operator cannot return list?

为什么?:运算符不能return列表?

my $hash =  {
    ...
    ($row->active?checked=>1:()),
};

DOC 未提及标量或列表上下文

UPD
另一个例子:

@list =  2,3;         # CORRECT
@list =  1? 2,3 : (); # Syntax error

为什么第一个可以,第二个不行?似乎 perl 将 2,3 传播到外部上下文应该没有问题;

这与上下文无关。您需要在中间部分加上括号,以便 Perl 正确解析您的语法。

my $hash = { ( 1 ? ( checked => 1 ) : () ), };

没有这些,就会出现语法错误。

syntax error at /home/simbabque/code/scratch/scratch.pl line 109, near "checked =>"

问题在于 ,=>(列表分隔符)的优先级低于 ?:=

所以这不是关于 perl 是否将 = 的右侧作为列表或标量传递的问题。这是一个语法错误,因为 @list=1?23:() 被作为列表的单独项目处理,每个项目包含半个 ?: 语句,这是不允许的。