是否有一个语句执行简单的T / F或0/1逻辑连接操作,返回布尔T / F或二进制或整数表示0或1作为独占输出?
&&
和and
运算符,而不是返回T / F(布尔值)或0/1(二进制),返回作为运算符的第二个参数提供的任何值,假设两个参数都是& #34;真" (例如,perl -e '$x=(3 && 2); print $x,"\n"'
产生的值为2;将语句更改为perl -e' $ x =(3&& 4); print $ x," \ n" '产生值4)。我试图找到一个不需要按最终参数划分的运算符或另外的if
语句来严格返回0或1。
我寻找这样一个运算符的原因是根据两个操作数的逻辑连接将计数器递增0或1,我更喜欢$counter += ($x && $y)
之类的语句的简洁,而不是替代(例如,if($x && $y) counter++
或$counter += ($x && $y)/$y
)。
答案 0 :(得分:4)
您可以通过双重否定强制布尔值
$counter += !!($x && $y);
答案 1 :(得分:4)
向计数器添加布尔值(即使约束为0或1)具有错误的代码气味。在Perl中执行此操作的惯用方法是使用语句修饰符:
$counter++ if $x && $y;
答案 2 :(得分:2)
use warnings;
use strict;
my $val1 = 0;
my $val2 = 0;
my $count = 0;
($val1 == 0 and $val2 == 0) ? $count++ : print "not equal\n";
print "$count\n";
答案 3 :(得分:2)
你没有意识到你已经自己提供了答案:
&&和运算符,而不是返回T / F(布尔值)或0/1(二进制)返回作为第二个参数提供给运算符的任何值,假设两个参数都是“true”
那么
呢$boolean = $val1 && $val2 && 1;
如果$ val1和$ val2都为真,这将评估为1,但是,如果任一参数为false,它将返回该值。要强制执行0,你可以建立相同的原则:
$boolean = $val1 && $val2 && 1 || 0;
虽然此时它开始变得笨拙,所以也许三元运算符是更好的解决方案:
$boolean = ($val1 && $val2) ? 0 : 1;