这是一个常见的示例代码:
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 ...
解决方法
如果有什么,可以说-1更可能是真的,因为-1(111..111b)是0的逐位否定(000..000b). BASIC和GW-BASIC在需要返回真值时使用-1.
无论如何,Perl认为意味着“空”或“无”的价值是虚假的.大多数语言也有类似的看法.具体来说,整数为零,浮点零,字符串为零,空字符串和undef为false.
这是documented,尽管文档措辞不好. (It list()作为一个值为false,但没有这样的值.)
除了一致性,采取这种方法是非常有用的.例如,它允许使用
if (@x)
代替
if (@x != 0)