2017-11-25 136 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( ' ');'。''' –