2012-09-24 49 views
7

シェルで直接実行したいスクリプトにのみshebang行を含めるべきであることが分かりました。私はまた、私がローカルにインストールした大規模なモジュールパッケージに含まれているシバン行を見ていません。シバンラインをPerlパッケージに含める理由はありますか?

しかし、私がまだ気付いていない何らかの理由で人々がそれを含めるかどうかは、まだ不思議でした。あるいは、それを含めるための(例えば)〜 '歴史的な'理由のようなものがあるかもしれないならば。または私の家が爆発する恐れがあるので、シバンの行が決して.pmファイル(ピリオド)に含まれることはありませんか?

+0

私が考えることができる唯一の使用は、誰かがテストを行いますが、スクリプトをモジュールとして実行するモジュールでいくつかのテストです。 – ikegami

答えて

7

いいえ。シバンはファイルを実行可能ファイルとしてマークし、通常モジュールは実行可能ではありません。

一般に例外があります。 Pythonには、現在のファイルがインタプリタによって呼び出されたものかどうかを検出するためのイディオムがあり、スタンドアロンで呼び出されたときに単体テストを実行するかなりのモジュールもあります。これはPerlコミュニティでは一般的ではありません.CPL上のモジュールにバンドルされた追加のユニットテストファイルがあります。

このような例外を念頭に置いても、直接実行するつもりはないモジュールファイルにシバンを含めるのは良いスタイルとは考えません。

+1

例外があります。たとえば、[App :: Module :: Lister](https://metacpan.org/module/App::Module::Lister)などです。 –

4

短い答えはいいえ、間違いはありません。

シバンの目的は、オペレーティングシステムにインタープリタがどこにあるかを知らせることです。 Perlファイル(スクリプトまたはモジュール)に追加する必要はありません。とにかくWindowsでは無視されます**。

具体的には、ほとんどの場合、モジュールを直接実行する理由がない限り、それをモジュールに追加する理由はありません。 Perlモジュールは本当に単なるPerlスクリプトです。先頭に 'package'コマンドがあります。

いずれにしても、それがあれば傷つくことはありませんが、ほとんどの場合は意味をなさない。

** Perlの起動方法にかかわらず、コマンドラインスイッチ用のシバンが常に表示されます。これは、OSがシバン行を探すのではなく、Perlがファイルをスキャンするときに、Windowsのために行われます。 http://perldoc.perl.org/perlrun.htmlを参照してください。

+0

モジュールに間違った場所を指しているシバン線がある場合、問題はありますか? perlインタプリタのバージョンが存在しないか間違っていますか?もしそうなら、それはこれをしない別の理由になります。 –

+0

無効なシバン行は、実行しようとすると 'interpreter not found'というエラーが発生します。 – tripleee

+0

@Stuart R. Jefferys、問題ありません。モジュールを実行しようとしないと、shabangは無視されます。 – ikegami

関連する問題