gpt4 book ai didi

perl - 向@INC 添加路径但不在 Perl 脚本中

转载 作者:行者123 更新时间:2023-12-04 15:45:57 28 4
gpt4 key购买 nike

我是用 Perl 和 Java 编写的工具的所有者。其中一个脚本使用像 JSON 这样的模块。和 Data::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但这无济于事,因为我的工具主要是执行 Perl 的 Java。此外,我不想更改脚本本身的任何内容,而是更改用户环境。

解决这种问题的方法是什么?有没有办法将路径“推”到 @INC来自 Linux?以后如何预防类似的问题?

最佳答案

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

我不知道你说的“PERL5LIB 检查目录中的模块但不递归”是什么意思,但是 PERL5LIB是一个 shell 变量,通常在你的 shell 配置文件中设置(虽然这也可以动态完成),到目录列表。来自 Environment (perlrun) , PERL5LIB

A list of directories in which to look for Perl library files before looking in the standard library and the current directory. [...]



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

使用 export in [ba]sh 确保它是一个环境变量
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" 

关于perl - 向@INC 添加路径但不在 Perl 脚本中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55806990/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com