2013-05-05 50 views
-1

我注意到perlcriticPerl::Critic)似乎並不關心if語句中的不匹配的parens,例如。但它似乎並不在乎(在較低嚴重程度的設置上)關於事物的批次perlcritic:不驗證語法

對我來說,如果它甚至不能告訴我,我有一個簡單的語法問題,如不匹配的parens似乎沒用。這是如何設計的?

+1

'perl -c script.pl'將運行語法檢查。不知道爲什麼'Perl :: Critic'會重複。 – Andomar 2013-05-05 18:51:17

+3

'perl -c'可以通知你語法問題。 'perlcritic'是一個lint程序,不是編譯器。 – jordanm 2013-05-05 18:51:24

+0

'perl -c'有一個[[脆弱]](https://github.com/SublimeLinter/SublimeLinter/issues/77)「 – 2013-05-05 22:48:50

回答

4

是的,這就是Perl :: Critic的工作原理。

我不確定它是否被明確地設計,而是編譯Perl代碼是如此微不足道,甚至沒有考慮。它也不知道如何構建Perl代碼,如果需要設置任何庫路徑或其他內容,那麼會增加額外的配置複雜性。另外,編譯Perl代碼可以執行Perl代碼,所以它成爲一個安全問題。

但是,它無法在未編譯的代碼上正確運行。所以你最好在linting之前編譯代碼。

對於語法檢查,您可以使用perl -c <your program>。對於更系統的檢查,您可以使用Test::Compile編寫測試。把它放入t/00compile.t。然後您可以使用Test::Perl::Critic來測試您的代碼不違反您的標準。把它寫入t/00critic.t,它會在編譯檢查後運行。

+0

'perl -c ...'選項是個好主意。另一個可能會導致配對不匹配的技巧是'perltidy'。 FWIW:當我暫停一下時,我的編輯器設置爲運行'perl -c ...'和'Perl :: Critic'。 – tjd 2013-05-06 17:40:14