私たちが 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
パスを手動で追加しますが、見栄えが悪いです。スクリプトを別のディレクトリに移動するとどうなりますか?BEGIN
use lib '/home/user/GreatScript';
- または、
FindBin
module を使用して現在のディレクトリを検索し、このパスを で使用しますがuse lib "$FindBin::Bin";
、100% 効果的ではありません。たとえば、mod_perl のバグや問題などです ... - または、__FILE__ (または $0) 変数を使用し、モジュールの
abs_path
メソッドを使用してそこからパスを抽出しCwd
ます。さらに別の自転車のように見えますか? - または、いくつかの忘れ物または行方不明 (何か見逃したことがありますか?)
この明白で定期的な操作に多くの作業が必要なのはなぜですか? スクリプトが 1 つあれば簡単ですが、すべてのスクリプトにこの数行のコードを追加する必要があるのはなぜでしょうか。そして、それは100%機能しません!@INC
"." の場合のように、perl がデフォルトで現在のスクリプト ディレクトリを追加しないのはなぜですか?
PS: 質問に対する回答を探していましたが、上記のリストと他のいくつかのソリューションのリストしか見つかりませんでした。この質問が重複していることを願っています...