Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使所有EPIC项目都能使用Perl';s@INC?_Perl_Eclipse_Epic - Fatal编程技术网

如何使所有EPIC项目都能使用Perl';s@INC?

如何使所有EPIC项目都能使用Perl';s@INC?,perl,eclipse,epic,Perl,Eclipse,Epic,我有一组内部依赖的Perl项目,并希望使用它们进行工作。我为每个项目创建了一个Epic(Eclipse)项目,并使用project | Properties | project References函数设置它们之间的依赖关系。 对于每个项目,我还将Perl Include Path(@INC)设置在项目属性中,Perl Include Path将路径添加到该项目使用的库中 问题是@INC设置似乎不可传递;如果项目B引用项目A,则B的@INC不会自动合并A的@INC。实际上,我必须手动添加从A的@

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

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


可以自动完成吗?

您是否知道中记录的PERL5LIB环境变量

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

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

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

From的答案是。您只需要在EPIC中使用这些技术之一


如何在运行时将目录添加到include路径(@INC)

以下是修改include路径的建议方法,包括环境变量、运行时开关和in-code语句:

PERLLIB环境变量

$ export PERLLIB=/path/to/my/dir
$ perl program.pl
$ export PERL5LIB=/path/to/my/dir
$ perl program.pl
PERL5LIB环境变量

$ export PERLLIB=/path/to/my/dir
$ perl program.pl
$ 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版本中。

如果您要迁移到Eclipse并希望它使用$PERL5LIB,请注意-T(污染模式)似乎在默认情况下在EPIC中启用。只需将“Perl-EPIC”->“Perl-executable”设置为简单的“Perl”(而不是“Perl-T”)即可取回$PERL5LIB


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

这看起来像是EPIC的功能请求project@Ivan也许是故意的?我对Perl没有什么经验,我不确定这个场景中的行为应该是什么。谢谢你的回答!这是一个更为基本但令人烦恼的问题的解决方案,“为什么EclipseEpic在我的终端上看不到与perl相同的@INC内容?”。注意:污点检查现在是EPIC的eclipse首选项中的一个复选框;i、 e在我的例子中,我在MacOSX上运行,从macports安装了一个自定义perl,因此命令行中的“哪个perl”列出了/opt/local/bin/perl。当我将其添加为可执行文件时,我的@INC突然开始工作。