2017-11-25 129 views
0

這是我的文件夾結構:Perl如何從另一個包中導入我的包?

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

package2.pl,我有:

package X::Pa2 

package1.p1,我有:

package X::Y::Pa1 

package1.pl,當我這樣做:

use X::Pa2; 

我得到

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

如何解決它嗎?

我知道問題出在哪裏,我嘗試使用谷歌幫助,但我不能加我X::Pa2@INC,我不知道是否有Perl的專家

+1

你的包需要一個'.P M'延伸和通常遵循的目錄路徑爲他們的名字'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(文件夾) - > Y.pm','X(文件夾) - > Y(文件夾) - > Z.pm'和內部Z.pm我使用X ::ÿ並且所述消息是X/Y.pm不在@INC,INC doen't包含基礎文件夾(其爲X),但我使用'使用LIB( ' ');'。''' –