我试过:

$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
('')

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

我最喜欢的一直是

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

它完全独立于内部表示。

使用下面的文件前缀,这将添加到你的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没有原生布尔类型,但是您可以使用比较整数或字符串来获得相同的行为。艾伦的例子就是一个很好的比较整数的方法。这里有一个例子

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中非常常见的混淆来源。

我建议使用boolean;。不过,您必须从cpan安装布尔模块。