3

我有一组内部依赖的 Perl 项目,并希望使用EPIC来处理它们。我为每个项目创建了一个 Epic (Eclipse) 项目,并使用 Project|Properties|Project References 函数设置它们之间的依赖关系。对于每个项目,我还在@INCProject|Properties|Perl Include Path 中设置 Perl Include Path ( ),将路径添加到该项目使用的库。

问题是@INC设置似乎不是可传递的;如果项目 B 引用项目 A,则 B@INC不会@INC自动合并 A。实际上,我必须手动添加从 A@INC到 B 的路径,@INC以使 Epic 看到所有必要的 Perl 库。

可以自动完成吗?

4

3 回答 3

3

如果您正在迁移到 Eclipse 并希望它使用 $PERL5LIB,请注意 EPIC 中似乎默认启用了 -T(污点模式)。只需将“Perl EPIC”->“Perl 可执行文件”设置为简单的“perl”(而不是“perl -T”)即可恢复您的 $PERL5LIB。

在 Project->Properties 中定义 @INC 可能被认为是更好的设计,但至少在我们部门,$PERL5LIB 与机器对机器不同。

于 2010-06-04T09:33:36.900 回答
1

perlfaq8How do I add a directory to my include path (@INC) at runtime的回答。您只需将其中一种技术与 EPIC 一起使用。


如何在运行时将目录添加到我的包含路径 (@INC)?

以下是修改包含路径的建议方法,包括环境变量、运行时开关和代码内语句:

PERLLIB 环境变量

$ export PERLLIB=/path/to/my/dir
$ perl program.pl

PERL5LIB 环境变量

$ export PERL5LIB=/path/to/my/dir
$ perl program.pl

perl -Idir 命令行标志

$ perl -I/path/to/my/dir program.pl

使用 lib 编译指示:

use lib "$ENV{HOME}/myown_perllib";

最后一个特别有用,因为它了解机器相关架构。lib.pm 实用模块首先包含在 Perl 的 5.002 版本中。

于 2009-11-26T01:06:43.197 回答
1

您知道 perlrun 手册页中记录的 PERL5LIB 环境变量

PERL5LIB

在查看标准库和当前目录之前,要在其中查找 Perl 库文件的以冒号分隔的目录列表。如果PERL5LIB未定义,PERLLIB则使用。运行污点检查时(因为脚本正在运行 setuid 或 setgid,或者使用了-T开关),两个变量都没有使用。脚本应该改为

use lib "/my/directory";

在您的示例中,您需要将 PERL5LIB 设置为@INC项目 A 和项目 B 中的值的并集。

如前所述,如果任何项目启用了污点检查 ( #! /usr/bin/perl -T),那么硬编码是更好的选择。

于 2009-11-17T23:23:18.900 回答