以下代码片段未按预期工作:
$k{"foo"}=1;
$k{"bar"}=2;
if(not defined($k{"foo"}) && not defined($k{"bar"})){
print "Not defined\n";
}
else{
print "Defined"
}
由于 $k{"foo"} 和 $k{"bar"} 均已定义,因此预期输出为“Defined”。但是,运行代码会返回“未定义”。
现在,在玩弄代码时,我意识到将括号括在每个not defined()
调用会产生所需的结果:
if((not defined($k{"foo"})) && (not defined($k{"bar"}))){print "Not Defined"}
我想这与运算符优先级有关,但有人可以解释到底发生了什么吗?
优先级问题。
not defined($k{"foo"}) && not defined($k{"bar"})
means
not ( defined($k{"foo"}) && not defined($k{"bar"}) )
这相当于
!defined($k{"foo"}) || defined($k{"bar"})
当你真正想要的时候
!defined($k{"foo"}) && !defined($k{"bar"})
解决方案:
!defined($k{"foo"}) && !defined($k{"bar"})
not defined($k{"foo"}) and not defined($k{"bar"})
(not defined($k{"foo"})) && (not defined($k{"bar"}))
PS - 该语言被命名为“Perl”,而不是“PERL”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)