[英]Perl's “not” operator not working as expected with the defined() function
The following snippet is not working as expected: 以下代码段未按预期工作:
$k{"foo"}=1;
$k{"bar"}=2;
if(not defined($k{"foo"}) && not defined($k{"bar"})){
print "Not defined\n";
}
else{
print "Defined"
}
Since both $k{"foo"} and $k{"bar"} are defined, the expected output is "Defined". 由于$ k {“foo”}和$ k {“bar”}都已定义,因此预期输出为“已定义”。 Running the code, however, returns "Not defined". 但是,运行代码会返回“未定义”。
Now, playing around with the code I realized that placing parentheses around each of the not defined()
calls produces the desired result: 现在,玩弄代码我意识到在每个not defined()
调用周围放置括号会产生所需的结果:
if((not defined($k{"foo"})) && (not defined($k{"bar"}))){print "Not Defined"}
I imagine this has something to do with operator precedence but could someone explain what exactly is going on? 我想这与运算符优先级有关,但有人可以解释究竟发生了什么吗?
Precedence problem. 优先问题。
not defined($k{"foo"}) && not defined($k{"bar"})
means 手段
not ( defined($k{"foo"}) && not defined($k{"bar"}) )
which is equilvalent to 这是等价的
!defined($k{"foo"}) || defined($k{"bar"})
when you actually want 当你真正想要的时候
!defined($k{"foo"}) && !defined($k{"bar"})
Solutions: 解决方案:
!defined($k{"foo"}) && !defined($k{"bar"})
not defined($k{"foo"}) and not defined($k{"bar"})
(not defined($k{"foo"})) && (not defined($k{"bar"}))
PS - The language is named "Perl", not "PERL". PS - 该语言被命名为“Perl”,而不是“PERL”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.