2017-11-25 13 views
0

これは私のフォルダ構造です:package2.plPerl別のパッケージから私のパッケージをインポートするには?

XFolder/ 
XFolder/YFolder/ 
XFolder/YFolder/package1.pl 
XFolder/package2.pl 

、私が持っている:package1.p1

package X::Pa2 

を、私が持っている:package1.pl

package X::Y::Pa1 

を、私はこれを行うとき:

use X::Pa2; 

私はそれをしてください修正する方法

Can't locate X/PA2.pm in @INC (you may need to install the X::Pa2 module) 

を取得しますか?問題がどこにある

は、私が知っていると私は助けるためにGoogleを使用しようとしましたが、私は追加できませんでした私にX::Pa2@INCとPerlの専門家

+1

あなたのパッケージは '.Pが必要通常はX/Pa2.pmとX/Y/Pa1.pmのディレクトリパスに従います。 – KeepCalmAndCarryOn

+0

@KeepCalmAndCarryOn私はそれらを.pmに変更しましたが、それと同じエラーを返しました:( –

答えて

3

モジュールからのより標準的な解決策があるかどうかはわかりません.pmの拡張子を持つ必要があります。ファイル名はパッケージ名と一致する必要があります。

修正するには:

mkdir -p X 
mv XFolder/package2.pl X/Pa2.pm 

mkdir -p X/Y 
mv XFolder/YFolder/package1.pl X/Y/Pa1.pm 

をこれらのパスは、@INCで見つかったいくつかのパスからの相対である必要があります。

これらのモジュールは私の複数のスクリプトを使用している場合は、ログインスクリプトに以下を追加します。これらのモジュールは一つだけのスクリプトによって使用されている場合

export PERL5LIB=/path/to/lib 

を、ベースディレクトリはスクリプトが置かれているディレクトリです、スクリプトに次の行を追加します。

use FindBin 1.51 qw($RealBin); 
use lib $RealBin;     # Or maybe: use lib "$RealBin/lib"; 

または

use Cwd qw(abs_path); 
use File::Basename qw(dirname); 
use lib dirname(abs_path($0));  # Or maybe: use lib dirname(abs_path($0))."/lib"; 
+0

私は拡張子を.pmに変更しました。パッケージは既にファイル名として使用されていますが、同じエラーが表示されます –

+0

実際に表示されるエラーメッセージと、ロードしようとしているファイルへの完全なパスを入力してください。 – ikegami

+0

ikegmai:ファイルは 'X(folder) - > Y.pm'、' X(folder) - > Y(folder) - > Z.pm'、Z.pmの中にあります。メッセージはX/Y.pmは@INCにはありません。INCはベースフォルダ(X)を含んでいませんが、 'use lib( '。');' –

関連する問題