私たちが perl に不慣れで、素晴らしいモジュールを書いたとしましょうMyModule.pm。myscript.plまた、このモジュールを使用する必要がある優れたスクリプトも作成しました。
use strict;
use warnings;
use MyModule;
etc...
ここで、dir を作成/home/user/GreatScriptし、そこにファイルを配置します。そして走ろうとするとmyscript.pl……
cd /home/user/GreatScript
perl myscript.pl
すごい!現在、別のディレクトリに移動しています...
cd /
perl /home/user/GreatScript/myscript.pl
あまり役に立たないエラー@INCとパスのリストを取得しています。これは何ですか?グーグルで@INC調べたところ、モジュールを検索するパスが含まれていることがわかりました。このエラーは、Perl が MyModule.pm を見つけられないことを意味します。
これで、次のことができます。
- システムPERL5LIB varへのパスを追加します。これにより、パスが先頭に追加され
@INCます。モジュールを次のいずれかのディレクトリにインストールします@INC - Add to our script セクションに
@INCパスを手動で追加しますが、見栄えが悪いです。スクリプトを別のディレクトリに移動するとどうなりますか?BEGINuse lib '/home/user/GreatScript'; - または、
FindBinmodule を使用して現在のディレクトリを検索し、このパスを で使用しますがuse lib "$FindBin::Bin";、100% 効果的ではありません。たとえば、mod_perl のバグや問題などです ... - または、__FILE__ (または $0) 変数を使用し、モジュールの
abs_pathメソッドを使用してそこからパスを抽出しCwdます。さらに別の自転車のように見えますか? - または、いくつかの忘れ物または行方不明 (何か見逃したことがありますか?)
この明白で定期的な操作に多くの作業が必要なのはなぜですか? スクリプトが 1 つあれば簡単ですが、すべてのスクリプトにこの数行のコードを追加する必要があるのはなぜでしょうか。そして、それは100%機能しません!@INC"." の場合のように、perl がデフォルトで現在のスクリプト ディレクトリを追加しないのはなぜですか?
PS: 質問に対する回答を探していましたが、上記のリストと他のいくつかのソリューションのリストしか見つかりませんでした。この質問が重複していることを願っています...