perl 标量变量的真假值判断

2017-05-14 11:43:27来源:CSDN作者:u010533843人点击

我们知道,在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,有着非常积极的世界观.他也许认为,这个世界上只有极少数事物是坏的或者假的,大部分事物都是真的. 

原文:http://perl5maven.com/boolean-values-in-perl


最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台