不打印perl false值

时间:2017-11-12 19:37:10

标签: perl

当我在perl中打印错误值时,我什么都没打印。可能这是一个非常简单的问题,但我没有找到答案就搜索了谷歌。

代码:

print "2 == 2 :", 2 == 2, "\n";
print "2 != 2 :", 2 != 2, "\n";
print "2 == 3 :", 2 == 3, "\n";
print "2 != 3 :", 2 != 3", "\n";

这是输出:

2 == 2:1
2 != 2 :
2 == 3 :
2 != 3 :1

为什么不打印假值?

3 个答案:

答案 0 :(得分:3)

Perl没有严格的布尔类型 - 它有很多东西可以评估为' false'其他一切都是真的。

现在,这就是事情 - 假的是数字上为零的任何东西,或者是一个空字符串。或者确实是print "Zero" if 0; print "Empty" if ''; print "Undef" if undef;

所以:

#!/usr/bin/env perl

use strict;
use warnings;

my $value = !1;
my $othervalue = !'true';

没有人会打印,因为所有的条件都是“错误的”。

现在,当你尝试创建一个' boolean' perl应该如何知道给它带来什么价值?

$value

此时$othervalue0是什么?我的意思是,0.00''if(和其他几个)中的任何一个都是有效的'。但事情就是这样 - 它并不重要,因为它是一个布尔值。只要你将它提供给use Scalar::Util qw ( isdual dualvar ); print "\$value is dual\n" if isdual $value; print "Coercing numerically:", 0+$value,"\n"; print "Coercing stringifically:", ''.$value,"\n"; 它就做对了,那么perl可以返回它喜欢的任何东西。

Perl作弊 - 它从这个操作返回一个dualvar - 一个带有两个值的变量,一个用于字符串上下文,另一个用于数字上下文。

你可以做一件不起作用的事情:

dualvar

这对于正常的数字(或字符串)值不起作用。您可以使用my $special = dualvar ( 666, "the beast" ); 函数重新创建相同的内容:

        getRedirectStrategy().sendRedirect(request, response, "/home/welcome?notactive");
尽管如此,使用dualvars进行干预通常不是很好的做法。只需用条件测试明确打印出你想要的内容,你就不会有任何歧义。

答案 1 :(得分:0)

' false'价值已被打印,分类,不用担心。

Perl有一个非常简单的概念' false',有关详细信息,请参阅the Perl Documentation。 @ jm666提供的链接更多地讲述了它。基本上,0""undef都是三个' false'。

print碰巧'字符串化'特别的“假”' value,即空字符串。

答案 2 :(得分:0)

您不应该期望能够打印布尔值。您应该期望能够使用布尔值的所有内容是询问它们是真还是假。

碰巧,您经常可以打印Perl的布尔值并获得有用的结果。大多数Perl布尔运算将为1提供true,为空字符串为false。 [更新>严格来说,你得到的是价值''和0的dualvar。这就是你在这里看到的。正在打印假值 ,但它是一个空字符串。

如果你想看到特定的东西来表明你的错误价值,那么你需要自己实现它。

print "2 == 3 :", (2 == 3 ? 'true' : 'false'), "\n";

但实际上,布尔值不适合显示。