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";
}
~$ raku
Welcome to 𝐑𝐚𝐤𝐮𝐝𝐨™ v2021.06.
Implementing the 𝐑𝐚𝐤𝐮™ programming language v6.d.
Built on MoarVM version 2021.06.
To exit type 'exit' or '^D'
> my $var = False;
False
> say $var;
False
> say $var.^name
Bool
> say $var.WHAT
(Bool)
> say ++$var
True
> say --$var
False
> say $var.Int
0
> say $var.Int + 1
1
> say ($var.Int + 1).Bool
True
> say $var.Int - 1
-1
> say ($var.Int - 1).Bool
True
> say $var.succ
True
> say $var.Int.succ
1
> say $var.pred
False
> say $var.Int.pred
-1
> say ++($var.Int); #ERROR
Cannot resolve caller prefix:<++>(Int:D); the following candidates
match the type but require mutable arguments:
(Mu:D $a is rw)
(Int:D $a is rw --> Int:D)
#<SNIP>
> say --($var.Int); #ERROR
Cannot resolve caller prefix:<-->(Int:D); the following candidates
match the type but require mutable arguments:
(Mu:D $a is rw)
(Int:D $a is rw --> Int:D)
#<SNIP>
> exit
9条答案
按热度按时间q9yhzks01#
在Perl中,下列条件式会评估为false:
其余的都是真的。没有
true
或false
的裸词。y4ekin9u2#
从5.36开始,你可以使用builtin模块/命名空间中的
true
和false
。这些是特殊的true和false值,可以使用is_bool
来识别。目前这是一个实验性的特性。但是,虽然这些标量可以说是返回真和假,但它们只是分别返回真或假的值。事实上,每个标量不是真就是假。
我所遇到的关于 * 虚假价值 * 的最完整、最简洁的定义是:
任何字符串化为空字符串或字符串
0
的字符串都是false,其他字符串都是true。因此,下列值为false:
false
(5.36以上)任何其他标量都为真。
请记住,空列表文字(
()
)在标量上下文中计算为未定义的值,因此它计算为false。关于“真零”的说明
如果数字串化为
0
,则为false;如果数字串化为0,则不一定为false。只有0
和空字符串为false。其他任何字符串,即使数字串化为0,也为true。以下是布尔值为true,数字为零的字符串:
"0.0"
"0E0"
"00"
"+0"
个"-0"
" 0"
"0\n"
"0."
个"0 but true"
"\t00"
Scalar::Util::looks_like_number
传回false的任何字串。(例如"abc"
)5w9g7ksd3#
Perl本身没有boolean类型,但是可以使用整数或字符串的比较来获得相同的行为。Alan的例子是使用整数比较的一种很好的方法。
我在我的一些程序中做的一件事是使用一个常量添加相同的行为:
在“use constant”中标记的行定义了一个名为true的常量,该常量的计算结果始终为1,以及一个名为false的常量,该常量的计算结果始终为0。由于Perl中定义常量的方式,以下代码行也会失败:
错误消息应该类似于“无法修改标量赋值中的常量”。
我在你询问的关于比较字符串的评论中看到了这一点。你应该知道,由于Perl在标量变量中结合了字符串和数字类型,所以你有不同的语法来比较字符串和数字:
这些运算符之间的差异是Perl中非常常见的混淆源。
3j86kqsm4#
我推荐
use boolean;
。不过你必须从cpan安装boolean模块。vshtjzan5#
我最喜欢的
其完全独立于内部表示。
cx6n0qe36#
我遇到了一个tutorial,它对Perl中什么值是true和false有很好的解释。它声明:
以下标量值被视为false:
undef
-未定义的值0
数字0,即使您将其写成000或0.0''
返回空字符串。'0'
返回包含单个0数字的字符串。所有其他标量值(包括以下值)均为真:
1
任何非0数字' '
返回包含空格的字符串'00'
字符串中有两个或多个0字符"0\n"
一个0后跟一个换行符'true'
'false'
是的,即使字符串'false'也计算为true。有另一个很好的教程,解释关于Perl true and false。
pkbketx97#
bobf对布尔值给出了漂亮的解释:True or False? A Quick Reference Guide
不同值的真值测试
n53p2ov08#
使用下面的文件前缀,这将添加到您的perl脚本eTRUE和eFALSE,它实际上是真实的(!)true和false(就像java一样)
实际上,你应该使用它的原因并不多。
我的理由是,使用JSON时,我得到了0和1作为键的值,但是这个技巧将确保正确的值沿着脚本保存。
wf82jlnq9#
Raku(以前称为Perl_6的编程语言)中的布尔值:
https://docs.raku.org/type/Bool
https://docs.raku.org/language/syntax#index-entry-Boolean_(literals)