2009-11-13 27 views
2

我有一组内部相关的Perl项目,并且想使用EPIC来处理它们。我为每个项目创建了一个Epic(Eclipse)项目,并使用Project | Properties | Project References函数设置它们之间的依赖关系。 对于每个项目,我还在Project | Properties | Perl Include Path中添加了Perl包含路径(@INC),该路径将路径添加到此项目使用的库中。如何启用所有EPIC项目以使用Perl的@INC?

问题是@INC设置似乎不是传递;如果项目B参考项目A,则B的@INC自动不包含A的@INC。实际上,我必须手动添加从A的@INC到B的@INC的路径,以使Epic能够查看所有必需的Perl库。

它可以自动完成吗?

+1

这看起来像EPIC项目的功能要求 – 2009-11-13 17:40:19

+0

@Ivan也许这是设计?我几乎没有Perl的经验,我不确定这种情况下的行为应该是什么。 – 2009-11-13 20:58:10

回答

1

您是否知道在perlrun manpage中记录的PERL5LIB环境变量?

PERL5LIB

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

use lib "/my/directory"; 

在你的榜样,你需要PERL5LIB设置为项目A和项目B.

@INC值的工会如前所述,如果任何项目启用污点检查(#! /usr/bin/perl -T),然后硬编码是最好的选择。

+0

谢谢,会试试这个。 – 2009-11-19 19:26:44

1

perlfaq8How do I add a directory to my include path (@INC) at runtime的回答。您只需要在EPIC中使用这些技术中的一种。


如何在运行时向包含路径(@INC)添加目录?

下面是修改的建议方法include路径,包括环境变量,运行时开关,并在代码语句:

的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实用模块首先包含在5中。002发布Perl。

3

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

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

+0

感谢您的回答!这是一个更基本但令人烦恼的问题的解决方案:“为什么EPIC看不到我终端上的Perl相同的@INC内容?”。注意:异常检查现在是EPIC eclipse首选项中的一个复选框。 – 2012-09-16 20:18:06

+0

perl可执行文件真的是您使用的perl文件也很重要;即在我的情况下,我在Mac OS X上运行自定义的perl安装,因此命令行中的“perl”列出了/ opt/local/bin/perl。当我将其添加为可执行文件时,我的@INC突然开始工作。 – 2012-09-16 20:52:54