2013-01-21 21 views
2

我目前正在運行perl -c filename來確定文件的語法是否正常。如果是這樣,我們可以將其提交給VCS。使用「perl -c」來驗證語法,但忽略特定的錯誤?

現在,一些要檢查的腳本有setuid位設置,這是完全沒問題的。根據perldiag這就是爲什麼我得到警告:

Args must match #! line at /home/user/filename line 1. 

我怎麼能抑制爲perl -c單次運行的警告?腳本必須用可變參數調用,所以我想要做一個忽略這個問題的語法檢查 - 這在上下文中不是真正的問題。


這是我想擺脫我的過濾器腳本的原因:它需要從字面上計數的輸出線,然後調整取決於相關的行數的退出代碼。這是相當乏味的。


一些更多的細節。原來,「警告」實際上是perl -c一個錯誤可以perldoc perldiag可以看出:

(F) A fatal error (trappable). 
[...] 
Args must match #! line 
    (F) The setuid emulator requires that the arguments Perl was invoked with 
    match the arguments specified on the #! line. Since some systems impose a 
    one-argument limit on the #! line, try combining switches; for example, 
    turn -w -U into -wU. 

請注意,這是一個相當老的系統(Red Hat Linux release 7.3 (Valhalla))和一個相當老的Perl(Summary of my perl5 (revision 5.0 version 6 subversion 1) ...)

似乎這個錯誤在較新的Perl版本中被棄用。我將嘗試更新Perl版本以查看這是否是一種可行的解決方法。

回答

4

perl -c的輸出引導過濾器拋出您不感興趣的警告(它通過正則表達式找到這些警告)。然後,如果您有任何警告或錯誤輸出,您將無法提交到VCS。如果沒有這樣的輸出,則提交給VCS。

+0

顯然,這是當前的解決方法。但不是我想要的。不過謝謝你的回答。 – 0xC0000022L

+1

哎呀。是否有任何討論[這裏](http://perldoc.perl.org/perllexwarn.html)有幫助? – DWright

+0

閱讀。謝謝。它可能。我不確定'perl -c'是否會授予這些權限。但由於它們是雜注,它可能應該。 – 0xC0000022L