|
原文:http://perl5maven.com/boolean-values-in-perl
我们知道,在Perl中,并没有专门的布尔值类型,但是在一些Perl文档中,你经常会看到诸如"某个函数返回了一个布尔值"或者"某个函数返回了true(或false)"等等这样的言论.那么,究竟哪种说法是对的呢?
Perl的确没有专门的布尔值类型,但是当任何一个标量放在if条件中时,它的值不是被当成真,就会被当成假.所以你的条件判断不仅可以这么写:
if($x eq "foo"){
}
同时还可以这么写:
if($x){
}
前一段代码是检查了变量$x的值是否等于字符串"foo",而后一段代码是用来检查$x变量是个真值还是个假值.
在Perl中,什么样的值是真值,什么样的值是假值?
答案很简单,我这里先直接引用一下perlsyn文档中"Truth and Falsehood"一小节中所讲的一段:
数字0,字符串'0'和空字符串"",空列表(),以及undef在布尔上下文中都是假值,除此之外,其他所有的值都是真值.如果使用!或者not运算符对这些真值取反,则会返回一个特殊的假值.如果这个假值被按照字符串解析,那么它会被当成一个空字符串""来对待,如果被按照数字解析,则它会被当成数字0来对待.
总结一下就是:在标量范围内,只有下面的这4个标量会被当成假值:
- undef - 表示未定义的值.
- 0 - 数字0,即使你写成000或者0.0也同样.
- '' - 空字符串.
- '0' - 只包含一个0字符的字符串.
所有其他的标量都是真值,包括下面举的这些例子:
- 1 - 任意的非零值.
- ' ' - 一个只包含了单个空格符的字符串.
- '00' - 一个只包含了两个或者更多0字符的字符串.
- "0\n" - 一个0字符后跟一个换行符组成的字符串.
- 'true'
- 'false' - 是的,即使是字符串'false',也是真值.
之所以这么设计,也许是因为Perl的创始人 —— Larry Wall,有着非常积极的世界观.他也许认为,这个世界上只有极少数事物是坏的或者假的,大部分事物都是真的. |
|
|