将路径添加到@INC,但不在Perl脚本中

时间:2019-04-23 08:19:17

标签: perl

我是用Perl和Java编写的工具的所有者。其中一个脚本使用了JSONData::Dumper之类的模块。 我的环境和我的@INC知道这些模块的位置。但是使用我的工具的用户有一个错误:

Can't locate JSON.pm in @INC (@INC contains: <PATHS> .) at /tools/bin/myscript.pl line 15.

我了解@INC的工作原理,我只是想知道什么是解决此问题的正确方法。我们在同一家公司(不同地区)工作,因此用户确实有权访问包含这些模块的区域。 从我的角度来看,这些脚本可以正常工作,因为我的@INC确实包含指向其中包含这些模块的区域的路径。

从以前的线程中,我了解到我可以使用包含(而非递归)包的区域设置PERL5LIB。但是这个问题感觉还不够好,因为然后我必须指定多个路径(因为JSON和Data :: Dumper不在同一区域,并且PERL5LIB检查目录中的模块,但不是递归的)。

此外,从先前的线程中,我了解到我可以运行perl -I myscript.pl,但这无济于事,因为我的工具主要是Java,它执行Perl。此外,我不希望在脚本本身而不是在用户环境下进行任何更改。

解决此类问题的方法是什么?有没有办法从Linux“推”到@INC的路径?将来如何避免此类问题?

1 个答案:

答案 0 :(得分:2)

据您的描述,PERL5LIB似乎是一个很好的解决方案。

我不知道“ PERL5LIB检查目录中的模块但不递归”是什么意思,但是PERL5LIB是一个shell变量,通常在您的外壳程序配置文件(也可以动态完成),并保存到目录的 list 中。在Environment (perlrun)中,PERL5LIB

  

在标准库和当前目录中查找之前,要在其中查找Perl库文件的目录列表。 [...]

因此,您可以将其设置为涵盖所有所需目录的合适目录。

通过使用export in [ba]sh

确保它是一个 environment 变量。
export PERL5LIB="/path/to/dir1:/other/path/dir2:$HOME/inhome/dir3"

如果目录名称中有空格,则使用引号。该行通常输入文件~/.bashrc

或者,如果在setenv中使用[t]csh,并在下一行添加到~/.tcshrc

setenv PERL5LIB "/path/to/dir1:/other/path/dir2:$HOME/inhome/dir3" 
相关问题