2011-06-21 25 views
8

代碼如下:嚴格使用時是否需要使用警告?

use strict; 
use warnings; 

這裏是必要use warnings;

+0

我經常看到這個。我的新迴應將是:http://joelslinux.blogspot.com/2011/06/use-strict-and-warnings.html –

+2

老實說,我很驚訝社區已經看到適合投票這麼高的時候http: //stackoverflow.com/search?q=%5Bperl%5D+strict+warnings表明這已被仔細研究過幾次。 –

回答

8

是的,這是必要的。

use strictuse warnings做不同的事情。

strict模塊的手冊頁:

嚴格 - Perl的編譯,限制不安全的構造

perlrun(爲-w):

輸出有關可疑 結構的警告,如僅提及的變量名稱 曾經和標量變量是 在設置之前使用 ,重新定義子程序,以 未定義 文件句柄或文件句柄引用以只讀方式打開,你是 嘗試寫上,作爲一個數字,這樣做值不 看起來像 數字,使用一個數組,就好像它是一個標量,如果 你的 子程序遞歸超過100深,和無數其他 的東西。

+0

是否有一個示例顯示「使用警告」會執行其他操作? –

+0

是 - 請參閱編輯以在評論時發佈。 – Alnitak

+1

你應該引用[perldiag](http://p3rl.org/diag)和[perllexwarn](http://p3rl.org/lexwarn)來代替'use warnings'而不是perlrun'-w'。 – daxim

5

是的。嚴格防範數量非常有限的事情。警告會提醒您注意不同的更廣泛的問題。

3

是,考慮:

perl -le "use strict; my $f; my $z = $f*1" 

嚴格不讓你知道,$ f是不確定的,同時加入警告將:

perl -le "use strict; use warnings; my $f; my $z = $f*1" 
Use of uninitialized value $f in multiplication (*) at -e line 1. 

因此建議同時啓用。

+0

我沒有在'peri v 5.8.8下使用未初始化的值$ f乘以(*)'。*'5.8.8 –

+0

你確定嗎?剛剛在5.8.8和5.10.1上進行了測試。兩者都給出相同的錯誤信息。你可能有修改過的Perl版本嗎?或者你也許忘了'使用警告'; – Htbaa

+0

@new_perl,那麼你有一個非常破碎的Perl安裝。 (我認爲5.8.8在警告中沒有提及'$ f',但它確實發出了警告。) – ikegami

1

「你的意思是必要的?」是我的回答。

如果你認爲strictwarnings是一樣的東西,你錯了。這裏的其他人對每個雜注都給出了非常好的答案。

use warnings一般來說會讓你成爲更好的編碼器。如果學習很重要,那麼我的答案是「是的」。

它還將幫助您避免錯誤,使您的錯誤更容易理解。

一般而言,我會說很少有時候不要同時使用strictwarnings。我甚至在我的單人隊中使用警告,例如> perl -we 'print "Hello world!"'

輸入數據需要幾秒鐘,但會爲您節省數小時不必要的工作調試時間。

2

這不是必要的在這個詞的實際含義。也就是說,一個程序不需要它來操作。人們經常忘記必要的的意思。

但是,如果您的問題是「嚴格啓用警告?」,答案是否定的。你可以看到reading its documentation有什麼嚴格的要求。

warnings通常用於指出您應該修復的問題。但是,Perl的警告並不要求您修復它們,所以即使它發出警告,您的程序也可以繼續。

有些人會告訴你總是使用警告,但他們制定了這樣的規則,所以他們不必考慮它,或者解釋給那些不會考慮它的人。除了「總是使用警告」之外,任何其他說法都是不受歡迎的。

warnings是開發人員的工具,如果看到警告的人不會知道他們是什麼或對他們做什麼,他們可能會造成煩惱或混亂。我見過一些實例,其中新的perls開始爲程序發出新的警告,然後由於沒有人監視日誌文件而填滿了磁盤。

我有一個更細緻的規則「當你要做某件事時使用警告,如果不行的話不要使用它們。

我甚至沒有說「總是寫無警告代碼」。我編寫的代碼很多,我只能運行一次,或者從命令行運行,或者在其他我不在乎流水的情況下運行。我不喜歡給其他人提供警告 - 髒代碼,但我不會爲自己做的一些小事而着迷。

+0

對那些您不同意的觀點進行了惡劣的投票。在我的情況下,答案的基礎是將問題解釋爲意思_「是'使用警告'是'使用嚴格'的一個子集?」 - 即「使用嚴格」避免了「使用警告」的需要。 – Alnitak

相關問題