2012-09-24 66 views
7

我意識到我應該只在我們希望直接在shell中運行的腳本中包含shebang行。我也沒有看到我在本地安裝的任何大型模塊包中包含的shebang行。是否有理由在Perl包中包含shebang行?

但是,我仍然很好奇,如果人們可能因爲其他原因我還沒有意識到這一點。或者,如果這可能是某種(如)〜'歷史'的理由來包含它。還是應該shebang行永遠不會包含在.pm文件(期間),因爲害怕我的房子爆炸?

+0

我能想到的唯一用途是有人,但有些模塊是通過執行模塊作爲腳本運行的。 – ikegami

回答

7

否。一個shebang將文件標記爲可執行文件,並且模塊通常不可執行。

一般來說,也有例外。 Python有一個習慣用法來檢測當前文件是否是解釋器調用的文件,而且有些模塊在單獨調用時使用它來運行它們的單元測試。這在Perl社區中並不常見,您可以在CPAN上將模塊與模塊綁定在一起。

所以,即使考慮到這種可能的例外情況,我也不認爲在模塊文件中包含shebang並不是直接執行的好方法。

+1

也有例外。例如[App :: Module :: Lister](https://metacpan.org/module/App::Module::Lister)。 –

4

簡短答案是否定的,但沒有正確或錯誤的答案。

shebang的目的是讓操作系統知道解釋器在哪裏。沒有要求將它添加到任何Perl文件(腳本或模塊)。在Windows下,無論如何都會被忽略**。

更具體地說,在大多數情況下,沒有理由將其添加到模塊中,除非您有某些原因希望直接執行該模塊。 Perl模塊實際上只是一個Perl腳本,頂部有一個'package'命令。

無論哪種方式,它不會傷害,如果它在那裏,但在大多數情況下,它沒有任何意義。

**無論Perl如何啓動,它總是會查看命令行開關的shebang。這甚至適用於Windows,操作系統不尋找shebang行,但是當Perl掃描文件時。請參閱http://perldoc.perl.org/perlrun.html

+0

模塊是否有指向錯誤位置的shebang線會有問題,例如: perl解釋器不存在或錯誤版本?如果是這樣,那將是另一個不這樣做的原因。 –

+0

如果你試圖執行一個無效的shebang行,將會導致'interpreter not found'錯誤。 – tripleee

+0

@Stuart R. Jefferys,沒問題。如果你不嘗試執行該模塊,shabang將被忽略。 – ikegami

相關問題