這是什麼Perl表達「」?
$DEBUG>=3 && DEBUG("OK=$ok");
什麼讓我如此困惑主要是布爾操作「& &」。任何人能解釋一下嗎?謝謝。
這是什麼Perl表達「」?
$DEBUG>=3 && DEBUG("OK=$ok");
什麼讓我如此困惑主要是布爾操作「& &」。任何人能解釋一下嗎?謝謝。
這是一樣的:
if($DEBUG >= 3) {
DEBUG("OK=$ok");
}
或
DEBUG("OK=$ok") if $DEBUG >= 3;
我個人比較喜歡這一個(這是更具可讀性對我來說)
說明:
Sentence1 && Sentence2
Sentence2
只有在Sentence1
爲真時纔會執行。該& &運算符是邏輯與,所以如果第一句是假的,完整的操作將是假的(它沒有neccesary評估第二句)
$ DEBUG必須爲3或更多,return
值必須爲true
。 True
裝置,其不
帶子的布爾部分也將被執行。因此,如果您的表達式位於if
子句中,則return
值將成爲該表達式的一部分。例如。
sub test {
return 1;
}
if ($abc >2 && test()) {
...
}
由於這是一個單獨的陳述,右手邊是否爲真並不重要。只有當它處於'if'狀態時才重要。 – simbabque
&&
是和運營商。但是,像C
一樣,Perl使用邏輯快捷方式。如果左側是錯誤的,那麼你知道整個陳述是錯誤的,所以你不必測試右側。但是,如果左側爲真,則必須測試右側以確保整個陳述是真實的。
因此,如果$DEBUG >= 3
爲真,則將執行右側$OK = "ok"
。這是一樣的:
if ($DEBUG >= 3) {
$OK = "ok";
}
而且,我認爲,最好是寫出來就像我很長的路要走。即使你知道&&
在邏輯陳述中所做的事情,它也需要你的大腦幾毫秒的處理來確定$DEBUG>=3 && $OK="ok";
正在做什麼。然而,執行起來可能不會更快,而不是長久寫下來。
在未來的某個地方,一些可憐的系統應用程序員(又名sap)必須進入並維護代碼。如果代碼被嚴密編寫的祕密陳述陷入困境,這將是一個需要維護的熊。
甚至不認爲寫$OK = "ok" if $DEBUG >= 3;
的。這不是一個後固定if語句的情況。
當然,由於存在誤解運營商優先級的風險,開發人員可能會寫出表達式在他/她的褲子座位上飛行。我目睹了產品代碼失敗,因爲開發人員不明白'&&'緊密綁定,而''和'綁定鬆散。在這種表達方式中''和''是最好的,因爲它的運算符優先級低;然而,謹慎的開發人員會使用括號使其絕對清晰,而不管優先規則如何,與什麼綁定。 –
另一個問題,如果我將「&&」更改爲「||」,這是什麼意思? – wuchang
如果你放了'||',它將只執行'DEBUG()'部分,如果'$ DEBUG'不大於或等於3因爲邏輯或。只有當左邊表達式不正確時纔會執行'||'的右側。還有比'或'更緊的綁定。 – simbabque