0

私は今、他のperlモジュールHello.pmを参照しなければならないperlファイルtest.plを持っています.Hello.pmとtest.plは同じディレクトリにあり、Hello.pmのパッケージ名宣言はpackage MRS::scripts::Hello. では、test.pl でモジュール Hello.pm をどのように使用すればよいでしょうか?

use Helloとを試しuse MRS::scripts::Helloましたが、システムは @INC で Hello.pm を見つけることができません。どうしたの?

4

2 に答える 2

3

useパッケージ名を取ります。次に、それぞれ::を次のようなパス区切り記号に変更し/、追加し.pmます。したがって、正しい使い方はuse Hello;.

ここには 1 つの問題がありHello.pmます@INC。私のperlの1つに、次の@INCようなエントリがあります

/home/amon/.config/perlbrew/perls/perl-5.18.1/lib/site_perl/5.18.1/i686-linux-thread-multi-64int
/home/amon/.config/perlbrew/perls/perl-5.18.1/lib/site_perl/5.18.1
/home/amon/.config/perlbrew/perls/perl-5.18.1/lib/5.18.1/i686-linux-thread-multi-64int
/home/amon/.config/perlbrew/perls/perl-5.18.1/lib/5.18.1
.

最後の 1 つは興味深いものです.。現在の作業ディレクトリを表します。残念ながら、これは常にスクリプトの場所と一致するとは限りません。FindBinモジュールでそれを解決できます:

use FindBin;             # get the script location, populates $FindBin::Bin
use lib $FindBin::Bin;   # tell perl to look for modules next to your script
use MRS::scripts::Hello; # load your module

…モジュールがファイルにあると仮定します$FindBin::Bin/MRS/scripts/Hello.pm

于 2013-08-30T08:02:05.883 に答える
2

パッケージ名が の場合MRS::scripts::Hello、perl は を検索しMRS/scripts/Hello.pmます。ディレクトリ構造を作成するか、モジュール ファイルから名前空間を削除してください。

つまり、一致する必要があるのは、ファイル パス、パッケージ名、および への引数の3 つuseです。

パッケージ名を変更する場合は注意してください。スクリプトに名前空間 (完全修飾名) に関する記述がある場合は、それらも変更する必要があります。

于 2013-08-30T07:57:47.847 に答える