我试过:
$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中什么值是真和假。它指出:
以下标量值被认为是假的:
Undef -未定义的值 0是数字0,即使你把它写成000或0.0 空字符串。 '0'包含单个0数字的字符串。
所有其他标量值,包括以下为真:
1任何非0的数字 ' '里面有空格的字符串 '00'在字符串中有两个或多个0字符 "0\n" 0后面跟着换行符 “真正的” 'false'是的,即使字符串'false'的值也是true。
还有另一个很好的教程,它解释了Perl的真假。
其他回答
我最喜欢的一直是
use constant FALSE => 1==0;
use constant TRUE => not FALSE;
它完全独立于内部表示。
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
从5.36开始,你可以在内置模块/命名空间中使用true和false。这些是特殊的true和false值,可以使用is_bool标识。这是目前的一个实验性特性。
但是,虽然它们可以说是返回true和false,但它们分别只是一个true或false值。事实上,每个标量不是真就是假。
我遇到的最完整、最简洁的假值定义是:
任何string为空字符串或字符串0的值都是假的。其他的都是真的。
因此,以下值为false:
false (5.36 +) 空字符串 数值0 未定义的值 具有重载布尔运算符的对象,用于计算上述运算符之一。 一个神奇的变量,在获取时求值为上述变量之一。
任何其他标量都为真。
请记住,空列表文字(())在标量上下文中计算为未定义的值,因此它的计算结果为false。
关于“真零”的注释
虽然将字符串化为0的数字是假的,但将字符串化为0的则不一定是假的。唯一的假字符串是0和空字符串。任何其他字符串,即使它numalize为0,也是true。
以下字符串作为布尔值为真,作为数字为零:
毫无预兆地: “0.0” “0 e0” “00” “+ 0” “0” “0” “0 \ n” “0” “0”。 “0但真的” “\ t00” “\ n0e1” “+ 0. e-9” 警告: Scalar::Util::looks_like_number返回false的任何字符串。(如。“abc”)
使用下面的文件前缀,这将添加到你的perl脚本eTRUE和eFALSE,它实际上将是REAL(!)真和假(就像java)
#!/usr/bin/perl
use strict;
use warnings;
use constant { #real true false, compatible with encode_json decode_json for later (we don't want field:false... will be field:0...)
eTRUE => bless( do{\(my $o = 1)}, 'JSON::PP::Boolean' ),
eFALSE => bless( do{\(my $o = 0)}, 'JSON::PP::Boolean' )
};
实际上,你应该使用它的原因很少。
我的原因是,与JSON工作,我已经得到0和1作为值的键,但这个hack将确保正确的值沿着你的脚本。
在Perl中,以下语句在条件条件中求值为false:
0
'0'
undef
'' # Empty scalar
() # Empty list
('')
其余的都是真的。没有赤裸裸的词语来区分真假。