2

为什么?:操作员不能返回列表?

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

DOC对标量或列表上下文只字未提

UPD
另一个例子:

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

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

4

2 回答 2

7

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

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

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

/home/simbabque/code/scratch/scratch.pl 第 109 行,“checked =>”附近的语法错误

于 2017-10-26T12:54:38.800 回答
7

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

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

于 2017-10-26T14:24:22.697 回答