我们有一个Perl框架,在其中我们创建了一些自定义模块。每当我尝试使用子目录中的模块时,它都会抛出错误。
以下是我的文件夹结构,frameworkfolder
是项目的基本/根目录:
.../frameworkfolder/PerlModules/Initialize.pm
我需要在另一个目录中的Perl文件中使用这个Initialize.pm
.../frameworkfolder/TestCases/FVT/fvt/fvt.pl
在fvt.pl
中,当Iuse PerlModules::Initialize
时,它抛出以下错误:
Can't locate PerlModules/Initialize.pm in @INC (you may need to install the PerlModules::Initialize module) (@INC contains: /usr/opt/perl5/lib/site_perl/5.28.1/aix-thread-multi /usr/opt/perl5/lib/site_perl/5.28.1 /usr/opt/perl5/lib/5.28.1/aix-thread-multi /usr/opt/perl5/lib/5.28.1)
如何使用fvt.pl
中的Initialize.pm
Perl包?或者任何其他目录中的任何其他perl文件?
我尝试过以下解决方案,但没有成功:
use lib '../../../frameworkfolder';
和
use FindBin;
use lib "$FindBin::Bin"
和
use FindBin;
use File::Spec;
use lib File::Spec->catdir($FindBin::Bin, '../../', 'lib');
和
#!/usr/local/bin/perl -w -I /frameworkfolder/
没有在中找到答案:Perl';s@INC建造?(又称影响Perl模块搜索位置的所有方式是什么?(
如果PerlModules/Initialize.pm
包含package Initialize;
:
use FindBin qw( $RealBin );
use lib "$FindBin::RealBin/../../../PerlModules";
use Initialize;
如果PerlModules/Initialize.pm
包含package PerlModules::Initialize;
:
use FindBin qw( $RealBin );
use lib "$FindBin::RealBin/../../..";
use PerlModules::Initialize;
(前者更有意义。(
注:
如果使用脚本的符号链接,则$Bin
中断。$RealBin
避免了这个问题
../../../frameworkfolder
、../../lib
和/frameworkfolder/
(会起作用。这些都离得很远。让别人教你相对路径的基础知识