//和||是什么?运营商在Perl做什么?

时间:2015-09-25 12:47:25

标签: perl

有人可以解释一下,如果检查以及何时通过该怎么办?

if ( $rate_minimum || 0 ) > ( (4 * $rate_max_min) // 120  ):

抱歉不是perl开发人员

2 个答案:

答案 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 的值为返回。