如何启用所有EPIC项目以使用Perl的@INC?

时间:2009-11-13 14:51:26

标签: perl eclipse epic

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

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

可以自动完成吗?

3 个答案:

答案 0 :(得分:3)

如果您要迁移到Eclipse并期望它使用$ PERL5LIB,请注意默认情况下似乎在EPIC中启用了-T(污染模式)。只需将“Perl EPIC” - >“Perl可执行文件”设置为“perl”(而不是“perl -T”)即可获得$ PERL5LIB。

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

答案 1 :(得分:1)

您是否了解perlrun manpage中记录的PERL5LIB环境变量?

  

<强> PERL5LIB
  

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

use lib "/my/directory";

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

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

答案 2 :(得分:1)

perlfaq8回答How 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 pragma:

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

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