使用一个Perl模块,它是另一个目录中的根目录



我们有一个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.pmPerl包?或者任何其他目录中的任何其他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避免了这个问题
  • 使用文件::规范没有意义。您的模块不会在VMS或Classic Mac操作系统上使用
  • 我不知道你为什么认为你使用的路径(../../../frameworkfolder../../lib/frameworkfolder/(会起作用。这些都离得很远。让别人教你相对路径的基础知识
  • 最新更新