我试过:

$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将确保正确的值沿着你的脚本。

其他回答

在Perl中,以下语句在条件条件中求值为false:

0
'0'
undef
''  # Empty scalar
()  # Empty list
('')

其余的都是真的。没有赤裸裸的词语来区分真假。

我偶然看到一个教程,它很好地解释了Perl中什么值是真和假。它指出:

以下标量值被认为是假的:

Undef -未定义的值 0是数字0,即使你把它写成000或0.0 空字符串。 '0'包含单个0数字的字符串。

所有其他标量值,包括以下为真:

1任何非0的数字 ' '里面有空格的字符串 '00'在字符串中有两个或多个0字符 "0\n" 0后面跟着换行符 “真正的” '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

使用下面的文件前缀,这将添加到你的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将确保正确的值沿着你的脚本。

我最喜欢的一直是

use constant FALSE => 1==0;
use constant TRUE => not FALSE;

它完全独立于内部表示。