为什么Perl认为-1是真的?

这是一个常见的示例代码:
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)

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...