我试过:
$var = false;
$var = FALSE;
$var = False;
这些都没用。我得到错误消息
Bareword "false" not allowed while "strict subs" is in use.
我试过:
$var = false;
$var = FALSE;
$var = False;
这些都没用。我得到错误消息
Bareword "false" not allowed while "strict subs" is in use.
当前回答
在Perl中,以下语句在条件条件中求值为false:
0
'0'
undef
'' # Empty scalar
() # Empty list
('')
其余的都是真的。没有赤裸裸的词语来区分真假。
其他回答
在Perl中,以下语句在条件条件中求值为false:
0
'0'
undef
'' # Empty scalar
() # Empty list
('')
其余的都是真的。没有赤裸裸的词语来区分真假。
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
Perl没有原生布尔类型,但是您可以使用比较整数或字符串来获得相同的行为。艾伦的例子就是一个很好的比较整数的方法。这里有一个例子
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中非常常见的混淆来源。
我偶然看到一个教程,它很好地解释了Perl中什么值是真和假。它指出:
以下标量值被认为是假的:
Undef -未定义的值 0是数字0,即使你把它写成000或0.0 空字符串。 '0'包含单个0数字的字符串。
所有其他标量值,包括以下为真:
1任何非0的数字 ' '里面有空格的字符串 '00'在字符串中有两个或多个0字符 "0\n" 0后面跟着换行符 “真正的” 'false'是的,即使字符串'false'的值也是true。
还有另一个很好的教程,它解释了Perl的真假。
我建议使用boolean;。不过,您必须从cpan安装布尔模块。