perl中的简单嵌套条件语句

时间:2014-03-20 15:08:54

标签: perl conditional

我想我错过了一些东西,正如我所说,下面应该打印MATCH。

($one,$two)=(220,219);
print "MATCH" if (($one or $one+1 or $one-1) == ($two or $two+1 or $two-1));

无法找到一个简单的解释,为什么我看不到MATCH打印。 还有另一种方法可以简单地测试上述情况吗?

2 个答案:

答案 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)

注意:这仅适用于整数。