为什么“?:”运算符不能 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?2
和 3:()
被作为列表的单独项目处理,每个项目包含半个 ?:
语句,这是不允许的。
为什么?:
运算符不能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?2
和 3:()
被作为列表的单独项目处理,每个项目包含半个 ?:
语句,这是不允许的。