Perl 的“非"运算符未按预期与 defined() 函数一起工作 [英] Perl's "not" operator not working as expected with the defined() function

查看:51
本文介绍了Perl 的“非"运算符未按预期与 defined() 函数一起工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下代码段未按预期工作:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆