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

PHA*_*PHA 1 perl

有人可以解释一下这是什么,如果检查和何时通过?

if ( $rate_minimum || 0 ) > ( (4 * $rate_max_min) // 120  ):
Run Code Online (Sandbox Code Playgroud)

抱歉没有成为perl开发人员

Sob*_*que 6

||是布尔值或运算符.$rate_minimum如果$rate_minimum是真的,它将返回,0否则.假值是主要 0,''undef.

//非常相似,但测试定义.(并且仅在Perl 5.10之后可用).这意味着值0仍为计数,因此如果$rate_max_min为零,则不会替换为120.(如果使用的话会去哪里||)

所以$rate_miniumum || 0将返回,$rate_minumum除非它是:0,空字符串或未定义.在这种情况下,||它将启动,而它将为零.

第二部分测试是否$rate_max_min定义,如果不定义,则将该值替换为120.(这允许它为零)

有关perlop详细信息,请参阅

作为一个相关点 - 你也可以做||=//=有条件地分配.

例如

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
Run Code Online (Sandbox Code Playgroud)

编辑:正如melpomene所说

如上所述,(4*$ rate_min_max)// 120是无用的,因为*的结果永远不会是undef.

这种有条件的应该大概是:

4 * ( $rate_min_max // 30 )
Run Code Online (Sandbox Code Playgroud)

代替.

例如:

my $rate_min_max = 0;
print 4 * ( $rate_min_max // 30 ),"\n";
$rate_min_max = undef;
print 4 * ( $rate_min_max // 30 ),"\n";
Run Code Online (Sandbox Code Playgroud)

  • 如上所述,`(4*$ rate_min_max)// 120`是无用的,因为`*`的结果永远不会是`undef`. (2认同)