2011-06-18 68 views
13

用Perl我幾乎總是使用:「使用診斷」有什麼問題嗎?

use strict; 
use diagnostics; 

我建議「使用診斷」,而不是use warnings;here,我收到了一些負面的反饋。所以,現在我在想:

use diagnostics;有什麼問題嗎?

+0

我正要問同樣的問題。 :) +1 –

回答

17

diagnostics不是像warnings這樣的詞彙雜注。相反,它會設置全局的$^W變量(如使用-w標誌),該變量會啓用全部代碼的警告,無論是否需要,以及是否寫入該代碼。這很粗魯。 diagnostics在生產中也很愚蠢。如果您需要解釋,我會建議您使用warnings,然後將您的警告管道輸入splain

9

use diagnostics將使您的代碼的執行速度減慢超過use warnings。如果您在開發過程中收到警告,您可以將其打開,但最好在完成後將其關閉。

+0

+1儘管如此,編寫不會發出警告和/或診斷的代碼仍然是最好的開始。 ;-) –

8

診斷編譯指示是一種開發工具,而且你不經常需要。使用它在需要的基礎上:

$ perl -Mdiagnostics myprog

與命令行-M switch意味着你不必記得回去和你的代碼中刪除測試只use diagnostics線啓用編譯。

0

如果您還沒有升級到perl版本5.12,診斷有一個掩蓋特定警告的錯誤。該bug已被固定在5.12(見perl512delta):

診斷不再抑制未初始化值的範圍內使用 (或 翻轉)警告。 [perl#71204]

一旦我意識到這個錯誤,我回去並在我所有的代碼中註釋了use diagnostics;。如果我收到警告信息,我暫時取消註釋,但總是返回並重新註釋。