我想我错过了一些东西,正如我所说,下面应该打印MATCH。
($one,$two)=(220,219);
print "MATCH" if (($one or $one+1 or $one-1) == ($two or $two+1 or $two-1));
无法找到一个简单的解释,为什么我看不到MATCH打印。 还有另一种方法可以简单地测试上述情况吗?
答案 0 :(得分:3)
逻辑或(例如or
)是short-circuiting operator,这意味着在
A or B
只有当A为FALSE时才会评估<。>
在上面的陈述中:
($one or $one+1 or $one-1)
变量$one
中包含的值为TRUE(因为它是!= 0),因此返回$one
的值,即220
。
($two or $two+1 or $two-1)
变量$two
中包含的值为TRUE(因为它是!= 0),因此返回$two
的值,即219
。
220 == 219
为FALSE,因此不打印"MATCH"
。
答案 1 :(得分:2)
你测试不起作用,因为每个括号总是返回第一个真正的断言(即第一个$one
的值和第二个的$two
的值)
您可以尝试这样的事情:
print "MATCH" if (abs($one-$two)<3)
注意:这仅适用于整数。