我在我的脚本中使用自定义模块并且必须将它们存储在 Perllib
目录之外。因此,在 Perl 脚本 ( *.pl
) 中,我使用以下块将它们包含在@INC
:
BEGIN {
use FindBin qw($Bin);
push @INC, "$Bin/../ModulesFolder1";
push @INC, "$Bin/../ModulesFolder2";
}
但是我还必须在我的其他 Perl 模块 ( *.pm
) 中使用模块,据我所知FindBin
,它只适用于脚本。所以我将该块更改为:
BEGIN {
push @INC, catdir( dirname( $INC{'ThisModule.pm'} ), qw( .. ModulesFolder1 ) );
push @INC, catdir( dirname( $INC{'ThisModule.pm'} ), qw( .. ModulesFolder2 ) );
}
它有效,但有一个小问题。我在 Eclipse 中使用 EPIC 插件进行编码,并且“如果您在 BEGIN 块中有导致编译器过早中止的内容,它不会向 EPIC 报告语法错误”,因此我在模块中放松了 Perl 语法检查。
因此,使用FindBin
(在脚本中)我不必catdir
在块中使用任何函数(如 )BEGIN{}
,并且以下代码的语法检查正确进行。此外,我不想更改任何环境变量(如PERL5LIB
),这样我就可以在同事的机器上使用脚本而无需任何额外的准备。
在其他模块中使用自定义 Perl 模块并且不同时干扰 EPIC 语法检查的正确方法是什么?或者我什至应该以完全其他方式包含模块?