简体   繁体   English

Perl的“not”运算符没有使用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"
}

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM