Perl 目前没有具体的布尔类型,但在Perl的文档中,你经常会看到某函数返回一个"布尔"值,有时文档中会写“函数返回true或者false”.

那么,事实如何?

Perl没有具体的布尔类型, 但是每个标量 -- 如果使用if来检查,都会返回true 或 false之一. 所以你可以这么写:

if ($x eq "foo") {
}

你也可以写:

if ($x) {
}

前者会判断 $x 变量的内容是否与"foo"字符串相等,而后者则判断 $x 本身是 true 还是 false。

Perl中的哪些值是true和false?

这很简单, 引用文档:

数字0, 字符串'0' 及 '', 空列表"()", 以及 "undef"在布尔上下文中都是false, 其它值为true.
使用 "!" 或 "not" 否定一个真值,会返回一个特定的假值. 当作为字符串计算时,把它看成'', 但是作为数字时, 它是0.

引用perlsyn文档的"Truth and Falsehood"一节.

所以,以下标量被认定为false:

  • undef - 未定义值
  • 0 数字0, 即便你写的是000或0.0
  • '' 空字符串.
  • '0' 包含单个0数字的字符串.

其它所有的标量(包括下面的)是true:

  • 1 任何非0数字
  • ' ' 有一个空格的字符串
  • '00' 两个及以上'0'字符的字符串
  • "0\n" 0及后面跟有一个换行符
  • 'true'
  • 'false' 没错, 即便是字符串'false'也被认定为是true.

我想这大概是因为Perl的创始人 Larry Wall 有着一个积极的世界观. 他可能认为, 世上坏的和假的事情是很少的, 大多数事情都是真的.