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

标签 perl boolean

这是一段常见的示例代码:

while (1) { 
    print "foo\n"; 
}

永远打印“foo”。
perl foo.pl
foo
foo
foo
...


while (0) { print "foo\n"; } 

如你所料,悄然死去:
perl test.pl

有人能解释一下为什么这是一个有用的 while 实现吗?这至少适用于 5.10、Unix 和 MacOS X:
while (-1) { print "foo\n"; }

这给
foo
foo
foo
...

最佳答案

如果有的话,可以说 -11 更有可能为真自 -1 ( 111..111b ) 是零 ( 000..000b ) 的按位求反。 BASIC 和 GW-BASIC 在需要返回真值时使用 -1。

无论如何,Perl 认为表示“空”或“无”的值是错误的。大多数语言都持有类似的观点。具体来说,整数零、浮点零、字符串零、空字符串和 undef 都是假的。

这是 documented ,尽管文档措辞不佳。 (它列出了 () 作为一个错误的值,但没有这样的值。)

除了一致性之外,采用这种方法非常有用。例如,它允许一个人使用

if (@x)

而不是
if (@x != 0)

关于perl - 为什么 Perl 认为 -1 是真的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7638195/

相关文章:

perl - 如何减去两个 HH :MM:SS times from each other in Perl?

javascript - "undefined"变量与 Javascript 中的空格的字符串连接

java - 如何在java中向数据库添加 boolean 值

perl - 如何在 Perl 中使用数组作为对象属性?

perl - 如何使Perl文件操作平台无关?

windows - Perl 程序的 Windows GUI 工具包有哪些好的选择?

perl - Perl 的模板工具包可以警告未定义的值吗?

javascript - console.log() 显示同一对象属性的矛盾值

python - 为空元组列表返回 False 的最佳方法

java - 无法从 int 转换为 boolean。 Java 错误(新案例)