我遇到了 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/