Perl如何从另一个包中导入我的包?
这是我的文件夹结构: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的专家
模块更标准的解决方案应该有.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";
未改变什么:(我改变了扩展名.pm和包已经作为文件名,但史迪威同样的错误 –
请提供返回的实际错误消息,并且您试图加载文件的完整路径。 – ikegami
ikegmai:文件是这样的:'X(文件夹) - > Y.pm','X(文件夹) - > Y(文件夹) - > Z.pm'和内部Z.pm我使用X ::ÿ并且所述消息是X/Y.pm不在@INC,INC doen't包含基础文件夹(其为X),但我使用'使用LIB( ' ');'。''' –
你的包需要一个'.P M'延伸和通常遵循的目录路径为他们的名字'X/Pa2.pm'和'X/Y/Pa1.pm' – KeepCalmAndCarryOn
@KeepCalmAndCarryOn我改变了他们的.pm,但仍是同样的错误:( –