为什么?:
运算符无法返回列表?
my $hash = {
...
($row->active?checked=>1:()),
};
DOC对标量或列表上下文一无所知
UPD
另一个例子:
@list = 2,3; # CORRECT
@list = 1? 2,3 : (); # Syntax error
为什么第一个没问题,但第二个不是?似乎perl不应该只是将2,3
传播到外部上下文;
答案 0 :(得分:7)
这与上下文无关。您需要在Perl的中间部分放置括号以正确解析语法。
my $hash = { ( 1 ? ( checked => 1 ) : () ), };
没有这些,就会出现语法错误。
/home/simbabque/code/scratch/scratch.pl第109行的语法错误," checked =>"
答案 1 :(得分:7)
问题在于,
和=>
(列表分隔符)的优先级低于?:
和=
。
所以这不是关于perl是否以=
的右侧作为列表或标量传递的问题。这是一个语法错误,因为@list=1?2
和3:()
作为列表的单独项处理,每个都包含半个?:
语句,这是不允许的。