perl - 短路并给出不正确的结果?

标签 perl short-circuiting operation

我遇到了 Perl 短路的奇怪结果,即 &&

我正在尝试解决 Project Euler 问题,我希望某个数字可以被数字列表整除。

$b=42;

if($b%21==0 && b%2==0 && b%5==2){print "Why not?"};

应该打印 "Why not" 就我所见,但保持沉默。

$b=42;

if($b%21==0 && b%2==0 && b%5==0){print "WTF?"};

应该保持沉默,但打印“WTF?”

什么给了?

最佳答案

正如 Rohit 所回答的,解决方案是在 b 之前添加 $。它不打印 "Why not?" 但打印 "WTF"的确切原因是:当你给 b 而没有 $ 符号(并且没有 use strict; 生效),Perl 将 b 视为字符串 "b"。然后当你对它应用运算符 % 时,由于 % 是一个数字运算符,Perl 在字符串 "b" 中查找并检查它是否以数字开头。既然没有,Perl 就把 "b" 的数值设为 0,然后应用 mod (%) 运算。 0%5 是 0 而不是 2,所以打印的是 WTF 而不是 "Why not?"

关于perl - 短路并给出不正确的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13540752/

相关文章:

mysql - SQL 位操作,将倒数第二位更改为 0

正则表达式在 Latex 环境之间查找和替换

javascript - 是否有一个 javascript (jquery) 库用于从 cgi 参数更新 html 表单控件?

perl - 为什么打开undef不会失败?

Python `or` , `and` 运算符优先级示例

mysql - 是否有 "best way"来短路 mysql 查询

rest - 在RESTful架构中实现类似批处理操作的最佳方法?

perl - 拼接:当 LENGTH 的末尾超过数组时可以吗?

mysql - MySQL 短路 IF() 函数吗?

python - 如何读取具有特定数据类型的文件内容,而不是Python中的字符串?