Perl 的“非"运算符未按预期与 defined() 函数一起工作 [英] 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"
}
因为 $k{"foo"} 和 $k{"bar"} 都被定义了,所以预期的输出是Defined".但是,运行代码会返回未定义".
Since both $k{"foo"} and $k{"bar"} are defined, the expected output is "Defined". Running the code, however, returns "Not defined".
现在,使用代码我意识到在每个 not defined()
调用周围放置括号会产生所需的结果:
Now, playing around with the code I realized that placing parentheses around each of the not defined()
calls produces the desired result:
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?
推荐答案
优先级问题.
not defined($k{"foo"}) && not defined($k{"bar"})
意思
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"})
未定义($k{"foo"})和未定义($k{"bar"})
(not defined($k{"foo"})) &&(未定义($k{"bar"}))
PS - 语言被命名为Perl",而不是PERL".
PS - The language is named "Perl", not "PERL".
这篇关于Perl 的“非"运算符未按预期与 defined() 函数一起工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!