为什么“?:”运算符无法返回列表?

时间:2017-10-26 12:43:19

标签: perl perlop

为什么?:运算符无法返回列表?

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

DOC对标量或列表上下文一无所知

UPD
另一个例子:

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

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

2 个答案:

答案 0 :(得分:7)

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

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

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

  /home/simbabque/code/scratch/scratch.pl第109行的

语法错误," checked =>"

答案 1 :(得分:7)

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

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