为什么?:
操作员不能返回列表?
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 ) : () ), };
没有这些,就会出现语法错误。
/home/simbabque/code/scratch/scratch.pl 第 109 行,“checked =>”附近的语法错误
问题是,
and =>
(列表分隔符)的优先级低于?:
and =
。
所以这不是关于 perl 是否将右侧=
作为列表或标量传递的问题。这是一个语法错误,因为@list=1?2
和3:()
被作为列表的单独项目处理,每个项目包含半个?:
不允许的语句。