gpt4 book ai didi

eclipse - 在其他 Perl 模块中使用 Perl 自定义模块的正确方法

转载 作者:行者123 更新时间:2023-12-03 03:38:14 24 4
gpt4 key购买 nike

我在脚本中使用自定义模块,并且必须将它们存储在 Perl lib 目录之外。因此,在 Perl 脚本 (*.pl) 中,我使用以下 block 将它们包含在 @INC 中:

BEGIN {
use FindBin qw($Bin);
push @INC, "$Bin/../ModulesFolder1";
push @INC, "$Bin/../ModulesFolder2";
}

但是我还必须在其他 Perl 模块 (*.pm) 中使用模块,并且据我了解 FindBin 仅适用于脚本。所以我将该 block 更改为:

BEGIN {
push @INC, catdir( dirname( $INC{'ThisModule.pm'} ), qw( .. ModulesFolder1 ) );
push @INC, catdir( dirname( $INC{'ThisModule.pm'} ), qw( .. ModulesFolder2 ) );
}

它可以工作,但有一点问题。我使用 EPIC 插件在 Eclipse 中进行编码,并且 "if you have something in a BEGIN block that causes the compiler to abort prematurely, it won't report syntax errors to EPIC" ,这样我就可以放松模块中的 Perl 语法检查。
因此,使用 FindBin (在脚本中),我不必在 BEGIN{} block 中使用任何函数(例如 catdir),并且以下代码的语法检查正确进行。此外,我不想更改任何环境变量(例如 PERL5LIB),这样我就可以在同事的计算机上使用这些脚本,而无需任何额外的准备。

在其他模块中使用自定义 Perl 模块并且同时不干扰 EPIC 语法检查的正确方法是什么?或者也许我什至应该以完全其他的方式包含模块?

最佳答案

我强烈反对修改模块中的@INC。它会引起各种头痛。让脚本(甚至通过 PERL5LIB 环境变量的调用进程)正确设置 @INC

script.pl:

use FindBin qw( $RealBin );
use lib
"$RealBin/../ModulesFolder1",
"$RealBin/../ModulesFolder2";

use ModuleInFolder1;

ModuleInFolder1.pm:

use ModuleInFolder2;  # Works fine.
<小时/>

对于 EPIC,请执行以下操作:

  1. 右键单击该项目。
  2. 属性
  3. Perl 包含路径
  4. ${project_loc}/ModulesFolder1,添加到列表
  5. ${project_loc}/ModulesFolder2,添加到列表

(我的字面意思是 14 个字符 ${project_loc}。这对 EPIC 来说意味着一些东西。即使您移动项目,它也会继续工作。)

<小时/>

PS — $RealBin$Bin 更好,因为它允许您使用脚本的符号链接(symbolic link)。

PS — __FILE__$INC{'ThisModule.pm'} 更合适。

关于eclipse - 在其他 Perl 模块中使用 Perl 自定义模块的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11687018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com