这是一段常见的示例代码:
while (1) {
print "foo\n";
}
永远打印'foo'。
perl foo.pl
foo
foo
foo
...
和
while (0) { print "foo\n"; }
像你期望的那样安静地死去:
perl test.pl
有人可以解释为什么这是一个有用的实现吗?这至少适用于5.10,Unix和MacOS X:
while (-1) { print "foo\n"; }
给出了
foo
foo
foo
...
答案 0 :(得分:19)
每个非零整数的计算结果为true
。 0总是false
答案 1 :(得分:18)
如果有的话,可以说-1
比1
更可能是真的,因为-1
(111..111b
)是零的逐位否定(000..000b
})。当需要返回真值时,BASIC和GW-BASIC使用-1。
无论如何,Perl认为那些意味着“空”或“没有”的值是错误的。大多数语言采用类似的观点。具体来说,整数零,浮点零,字符串零,空字符串和undef都是假的。
这是documented,虽然文档措辞不佳。 (它将()
列为虚假值,但没有这样的值。)
除了一致性之外,采用这种方法非常有用。例如,它允许使用
if (@x)
而不是
if (@x != 0)
答案 2 :(得分:16)
来自perldoc perlsyn (Truth and Falsehood):
数字0,字符串'0'和'',空列表()和undef 在布尔上下文中都是false。所有其他值都是真的。
-1
被认为是真的。
答案 3 :(得分:4)
只有0整数被视为false。任何其他非零整数都被视为真。
答案 4 :(得分:4)
问题是'为什么perl认为-1是真的?'。
答案是在开发perl时,决定将某些值评估为false。这些是:
对于为什么,我能想到一个合适的答案。它就是这样设计的。
答案 5 :(得分:2)
任何整数<> 0是真的。 0总是假的。
答案 6 :(得分:1)
Perl从awk
和C
采取了此行为。
为什么C
会解释here。