我试过:
$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脚本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将确保正确的值沿着你的脚本。
其他回答
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
我最喜欢的一直是
use constant FALSE => 1==0;
use constant TRUE => not FALSE;
它完全独立于内部表示。
在Perl中,以下语句在条件条件中求值为false:
0
'0'
undef
'' # Empty scalar
() # Empty list
('')
其余的都是真的。没有赤裸裸的词语来区分真假。
使用下面的文件前缀,这将添加到你的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将确保正确的值沿着你的脚本。
我建议使用boolean;。不过,您必须从cpan安装布尔模块。