Perl如何从另一个包导入我的包?

时间:2017-11-25 20:37:39

标签: perl perl5

这是我的文件夹结构:

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 个答案:

答案 0 :(得分: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";