当我在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
为什么不打印假值?
答案 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
此时$othervalue
或0
是什么?我的意思是,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";
但实际上,布尔值不适合显示。