提问人:Eugen Konkov 提问时间:11/27/2020 最后编辑:Artjom B.Eugen Konkov 更新时间:11/29/2020 访问量:71
在列表上下文中分配哈希值有什么区别?
What is a difference while assigning hash in list context?
问:
我必须表达:
%MON = months => 1, end_of_month => 'limit'; # months => undef
%MON = ( months => 1, end_of_month => 'limit' );
为什么第一个表达式只产生一个带值的键?
它们之间有什么区别?months
undef
答:
5赞
Quentin
11/27/2020
#1
请参见 perlop。 具有高于=
=>
%MON = months => 1, end_of_month => 'limit';
等同于:
(%MON = "months"), 1, "end_of_month", "limit"
而:
%MON = ( months => 1, end_of_month => 'limit' );
是:
%MON = ("months", 1, "end_of_month", "limit")
2赞
Dave Cross
11/27/2020
#2
下面是 Perl 的运算符优先级表(来自 perlop):
left terms and list operators (leftward)
left ->
nonassoc ++ --
right **
right ! ~ \ and unary + and -
left =~ !~
left * / % x
left + - .
left << >>
nonassoc named unary operators
nonassoc < > <= >= lt gt le ge
nonassoc == != <=> eq ne cmp ~~
left &
left | ^
left &&
left || //
nonassoc .. ...
right ?:
right = += -= *= etc.
left , =>
nonassoc list operators (rightward)
right not
left and
left or xor
请注意,其优先级高于 或 。因此,您需要括号来覆盖优先级。=
,
=>
评论
0赞
Eugen Konkov
11/28/2020
在上下文中使用时,优先级应该较低吗?=
void
2赞
ikegami
11/28/2020
@Eugen Konkov 中,在确定哪个运算符是哪个操作数之前,无法确定运算符的上下文。在确定结果片段的上下文之前,必须进行解析。例如,in 是在 void 上下文中计算的,但 in in 是在标量上下文中计算的,您只知道优先级。还有一个问题是,函数和返回表达式的最后一个语句的上下文直到运行时才知道,因此它不可能影响代码的编译方式。=
A = B && C; 1
=
A = B and C; 1
评论