有人可以解释一下,如果检查以及何时通过该怎么办?
if ( $rate_minimum || 0 ) > ( (4 * $rate_max_min) // 120 ):
抱歉不是perl开发人员
答案 0 :(得分:6)
||
是布尔值或运算符。如果$rate_minimum
为真,则返回$rate_minimum
,否则返回0
。错误值为primarily 0
,''
和undef
。
//
非常相似,但仅测试已定义。 (And is only available since Perl 5.10)。这意味着值0
仍然有效,因此如果$rate_max_min
为零,则将替换为120
。 (如果||
被使用,它会在哪里)
所以$rate_miniumum || 0
将返回$rate_minumum
,除非它是:0
,空字符串或未定义。在这种情况下,||
将启动,而它将为零。
第二部分测试$rate_max_min
是否定义,如果不是,则将该值替换为120.(这允许它为零)
有关详细信息,请参阅perlop
。
作为相关点 - 您还可以执行||=
和//=
来有条件地分配。
E.g。
my $value = undef;
$value //= 42;
print $value,"\n";
# 42
$value = 0;
$value //= 42;
print $value,"\n";
# 0
$value = 0;
$value ||= 42;
print $value,"\n";
# 42
编辑:正如melpomene
所述如上所述,(4 * $ rate_min_max)// 120是无用的,因为*的结果永远不会是undef。
该条件应该可能:
4 * ( $rate_min_max // 30 )
代替。
e.g:
my $rate_min_max = 0;
print 4 * ( $rate_min_max // 30 ),"\n";
$rate_min_max = undef;
print 4 * ( $rate_min_max // 30 ),"\n";
答案 1 :(得分:1)
以下说明可以帮助您:
见||是一个 OR逻辑运算符,//与||完全相同,只是它测试左侧的定义而不是它的真实性。因此, EXPR1 // EXPR2 会返回 EXPR1 的值(如果已定义),否则 EXPR2 的值为返回。