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

Perl如何从另一个包导入我的包?,perl,Perl,这是我的文件夹结构: XFolder/ XFolder/YFolder/ XFolder/YFolder/package1.pl XFolder/package2.pl 在package2.pl中,我有: package X::Pa2 package X::Y::Pa1 在package1.p1中,我有: package X::Pa2 package X::Y::Pa1 在package1.pl中,执行此操作时: use X::Pa2; 我明白了 无法在@INC中找到X/PA2.pm

这是我的文件夹结构:

XFolder/
XFolder/YFolder/
XFolder/YFolder/package1.pl
XFolder/package2.pl
package2.pl
中,我有:

package X::Pa2
package X::Y::Pa1
package1.p1
中,我有:

package X::Pa2
package X::Y::Pa1
package1.pl
中,执行此操作时:

use X::Pa2;
我明白了

无法在@INC中找到X/PA2.pm(您可能需要安装X::PA2模块)
请问怎么修


我知道问题出在哪里,我尝试使用google来帮助解决,但我无法将我的
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";


模块应具有
.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";


您的软件包需要一个
.pm
扩展名,并且通常按照其名称的目录路径
X/Pa2.pm
X/Y/Pa1.pm
@KeepCalmAndCarryOn我将其更改为.pm,但仍然存在相同的错误:(您的软件包需要一个
.pm
扩展名,并且通常按照其名称的目录路径
X/Pa2.pm
X/Y/Pa1.pm
@KeepCalmAndCarryOn我将其更改为.pm,但仍然是相同的错误:(这没有改变任何内容:(我将扩展名更改为.pm,并且包已经作为文件名,但仍然是相同的错误。请提供返回的实际错误消息,以及您尝试加载的文件的完整路径。ikegmai:文件如下:
X(文件夹)->Y.pm
X(文件夹)->Y(文件夹)->Z.pm
在Z.pm中我确实使用了X::Y,消息是X/Y.pm不在@INC中,INC不包含基本文件夹(即X),但我使用的是
使用lib('.');
使用lib('.'));
不正确,并且与我说的您应该使用的不同。首先修复它。然后,如果您仍然收到错误,请提供返回的实际错误消息,以及您尝试加载的文件的完整路径。
在@INC中找不到X/Y.pm(您可能需要安装X::Y模块)(@INC包含:./Library/Perl/5.18/darwin-thread-multi-2level/Library/Perl/5.18/Network/Library/Perl/5.18/Network/Library/Perl/Updates/5.18.2/darwin-thread-multi-2level/Library/Updates/5.18.2/System/Library/Perl/5.18/darwin-thread-multi-2level/5.18/System/Library/Perl/Perl)/Extras/5.18/darwin-thread-multi-2level/System/Library/Perl/Extras/5.18)在X.pm第12行。
我的文件路径是:这没有改变任何东西:(我将扩展名更改为.pm,并且包已经作为文件名,但仍然是相同的错误。请提供返回的实际错误消息,以及您尝试加载的文件的完整路径。ikegmai:文件如下:
X(文件夹)->Y.pm
X(文件夹)->Y(文件夹)->Z.pm
在Z.pm中我确实使用了X::Y,消息是X/Y.pm不在@INC中,INC不包含基本文件夹(即X),但我使用的是
使用lib('.');
使用lib('.'));
不正确,并且与我说的您应该使用的不同。首先修复它。然后,如果您仍然收到错误,请提供返回的实际错误消息,以及您尝试加载的文件的完整路径。
在@INC中找不到X/Y.pm(您可能需要安装X::Y模块)(@INC包含:./Library/Perl/5.18/darwin-thread-multi-2level/Library/Perl/5.18/Network/Library/Perl/5.18/Network/Library/Perl/Updates/5.18.2/darwin-thread-multi-2level/Library/Updates/5.18.2/System/Library/Perl/5.18/darwin-thread-multi-2level/5.18/System/Library/Perl/Perl)/Extras/5.18/darwin-thread-multi-2level/System/Library/Perl/Extras/5.18)在X.pm第12行。
我的文件路径是: