我试过了:
$var = false; $var = FALSE; $var = False;
这些都不起作用.我收到错误消息
Bareword "false" not allowed while "strict subs" is in use.
Alan Haggai .. 282
在Perl中,以下在条件语句中评估为false:
0 '0' undef '' # Empty scalar () # Empty list ('')
其余的都是如此.没有裸言语true
或false
.
在Perl中,以下在条件语句中评估为false:
0 '0' undef '' # Empty scalar () # Empty list ('')
其余的都是如此.没有裸言语true
或false
.
我遇到的最完整,最简洁的错误定义是:
字符串化为空字符串或字符串"0"的任何内容都是false.其他一切都是真的.
因此,以下值为false:
空字符串
数值为零
未定义的值
具有重载布尔运算符的对象,用于计算上述其中一个.
一个神奇的变量,在上面的fetch中评估其中一个.
请记住,空列表文字在标量上下文中求值为未定义的值,因此它的计算结果为false.
关于"真零"的说明
虽然字符串化的数字0
是假的,但数字为零的字符串不一定.唯一的假字符串是0
空字符串.任何其他字符串,即使它编号为零,也是如此.
以下是作为布尔值为真的字符串,以及作为数字的零.
没有警告:
"0.0"
"0E0"
"00"
"+0"
"-0"
" 0"
"0\n"
".0"
"0."
"0 but true"
"\t00"
"\n0e1"
"+0.e-9"
带警告:
任何Scalar::Util::looks_like_number
返回false的字符串.(例如"abc"
)
Perl没有本机布尔类型,但您可以使用整数或字符串的比较来获得相同的行为.Alan的例子是使用整数比较的一种很好的方法.这是一个例子
my $boolean = 0; if ( $boolean ) { print "$boolean evaluates to true\n"; } else { print "$boolean evaluates to false\n"; }
我在一些程序中完成的一件事是使用常量添加相同的行为:
#!/usr/bin/perl use strict; use warnings; use constant false => 0; use constant true => 1; my $val1 = true; my $val2 = false; print $val1, " && ", $val2; if ( $val1 && $val2 ) { print " evaluates to true.\n"; } else { print " evaluates to false.\n"; } print $val1, " || ", $val2; if ( $val1 || $val2 ) { print " evaluates to true.\n"; } else { print " evaluates to false.\n"; }
"use constant"中标记的行定义一个名为true的常量,总是求值为1,一个名为false的常量始终求值为0.由于在Perl中定义常量的方式,以下代码行也会失败:
true = 0; true = false;
错误消息应该说"无法修改标量赋值中的常量".
我在其中一条关于比较字符串的评论中看到了这一点.您应该知道,因为Perl在标量变量中组合了字符串和数字类型,所以您可以使用不同的语法来比较字符串和数字:
my $var1 = "5.0"; my $var2 = "5"; print "using operator eq\n"; if ( $var1 eq $var2 ) { print "$var1 and $var2 are equal!\n"; } else { print "$var1 and $var2 are not equal!\n"; } print "using operator ==\n"; if ( $var1 == $var2 ) { print "$var1 and $var2 are equal!\n"; } else { print "$var1 and $var2 are not equal!\n"; }
这些运算符之间的差异是Perl中非常常见的混淆源.
我推荐use boolean;
.你必须从cpan 安装布尔模块.
我的最爱一直都是
use constant FALSE => 1==0; use constant TRUE => not FALSE;
这完全独立于内部表征.
我遇到了一个教程,它很好地解释了Perl中什么值是真和假的.它声明:
以下标量值被视为错误:
undef
- 未定义的值
0
数字0,即使你把它写成000或0.0
''
空字符串.
'0'
包含单个0位的字符串.
所有其他标量值,包括以下内容均为真:
1
任何非0号码
' '
带有空格的字符串
'00'
字符串中有两个或多个0个字符
"0\n"
a 0后跟换行符
'true'
'false'
是的,即使字符串'false'评估为true.
还有另一个很好的教程可以解释Perl的真假.
bobf给出的布尔值的漂亮解释:是 真还是假?快速参考指南
真理测试不同的值
Result of the expression when $var is: Expression | 1 | '0.0' | a string | 0 | empty str | undef --------------------+--------+--------+----------+-------+-----------+------- if( $var ) | true | true | true | false | false | false if( defined $var ) | true | true | true | true | true | false if( $var eq '' ) | false | false | false | false | true | true if( $var == 0 ) | false | true | true | true | true | true