2009-11-23 26 views
5

我知道智能::評論不應該用在生產代碼中,因爲它是一個源代碼過濾器。如果我在開發代碼中使用Smart :: Comments,應該擔心什麼?

但是,我一直在我的開發代碼中使用Smart::Comments,然後在將代碼發送到生產之前註釋掉「使用」行。

鑑於我打算在開發代碼中使用它,我應該特別關注什麼?我搜索了互聯網,沒有發現任何我應該擔心的原因,除非源代碼過濾器是「壞主意」或「邪惡」,或者它們不應該用於生產代碼。

UPDATE: 現在,我使用的關鍵在VIM結合來實現思南Ünür的做法:

map <Leader>c <Esc>:!perl -MSmart::Comments %<CR> 
+1

另請參閱daotoad的社區wiki,他在回答這個問題後打開:http://stackoverflow.com/questions/1785852/why-are-perl-source-filters-bad-and-when-is-it-ok -to-的用他們。 – 2009-11-23 21:32:37

+0

請參閱[2015 Perl Advent關於Smart :: Comments的文章](http://www.perladvent.org/2015/2015-12-11.html) – 2015-12-11 07:25:43

回答

4

源過濾是問題,因爲它們使用一個不完美的解析器來重寫代碼。一切都很好,只要過濾器管理你提供的代碼即可。

當你添加破壞過濾器的東西的時候,整個系統會自毀,你會得到奇怪的錯誤。

源代碼過濾器也混淆了調試器,這可能是一個問題 - 如果您使用調試器。

2

我對源過濾器部分沒有意見。但看看Smart::Comments的簡介。他們可能很聰明,但你最終得到的東西很難被稱爲「評論」。如果您需要進度條,請繼續,明確添加一個。如果您需要評論某些內容,可以讓下一個閱讀您的內容的人瞭解您的意思。

1

Smart :: Comments是特別以這種方式編寫的,當你註釋掉「使用Smart :: Comments」時,它將只是註釋,所以程序根本不受影響。其他模塊有更嚴重的問題,比如你無法獲得確切的錯誤行數。

9

我寧願不要放:

use Smart::Comments; 

在我的代碼。當我確實使用Smart::Comments,我使用調用腳本:

$ perl -MSmart::Comments test.pl 

這樣一來,就沒有機會Smart::Comments將在生產代碼中使用。

+1

++!我經常看到S :: C,並希望我不相信源過濾器的完全禁慾。這提供了一個安全的方式來使用S :: C - 現在我可以真正使用它們。 – daotoad 2009-11-24 06:48:22

+0

謝謝!好方法。 – 2009-11-25 16:35:47

5

我是Smart :: Comments的忠實擁躉,在我們的代碼,開發和生產副本中被調用。我很少將它用於進度條,主要用於斷言和調試輸出。

然而,這種做法是把它拉在使用形式:

use Smart::Comments -ENV; 

如果沒有設置環境變量Smart_Comments,智能::評論完全是惰性。

兩全其美。

+0

謝謝!另一種方式來做到這一點。 – 2009-11-25 16:36:32

相關問題