2015-09-25 57 views
1

有人可以解釋一下,如果檢查和通過時是什麼?//和||是什麼?運算符在Perl中做什麼?

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

對不起,不是一個Perl的開發

+3

http://perldoc.perl.org/perlop。html有一個很好的總結 –

+0

這是一個語法錯誤。首先,你錯過了一個附加的括號。其次,該行以冒號':'結尾,該冒號不屬於那裏。我想第三,代碼是沒有意義的,並且它的主要觀點是避免未定義的警告(它沒有),這可以用比這更好的方式處理。 – TLP

回答

6

||是OR運算符。如果$rate_minimum爲真,它將返回$rate_minimum,否則返回0。假值爲primarily0,''undef

//非常相似,但是只有測試定義。 (And is only available since Perl 5.10)。這意味着0的值仍然計數,因此如果$rate_max_min爲零,則將不會被替換爲120。 (如果它會如果||已經使用)

所以$rate_miniumum || 0將返回​​,除非它可以是: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是無用的,因爲*的結果絕不會是聯合國民主基金指出。

把條件應該可能是:

4 * ($rate_min_max // 30) 

代替。

例如爲:

my $rate_min_max = 0; 
print 4 * ($rate_min_max // 30),"\n"; 
$rate_min_max = undef; 
print 4 * ($rate_min_max // 30),"\n"; 
+2

正如所寫,'(4 * $ rate_min_max)// 120'是無用的,因爲'*'的結果永遠不會是'undef'。 – melpomene

+0

好點。將修改。我假設他們試圖將'$ rate_min_max'設爲零,但是失敗。 – Sobrique

+1

也許他們無意中在他們的分區中加了一個額外的'/'? – RobEarl

1

以下解釋將幫助您:

見||是或邏輯運算符和//與||完全相同,只是它測試左側的定義而不是它的真值。因此,EXPR1 // EXPR2返回,如果它的定義,否則,返回EXPR2價值EXPR1值。