我有一个问题,我想use local::lib;
在一个脚本中。但是因为我需要在很多地方使用这个脚本,所以我不想尝试添加eval
to bashrc
,每次我将此脚本安装到服务器时。而且我无法在服务器上全局(默认)安装local::lib 。@INC
我有什么办法可以use local::lib
从脚本中知道模块local::lib
在没有eval
推荐local::lib
的情况下并且不将其安装到服务器上默认的目录中@INC
?
问问题
253 次
2 回答
3
您至少需要知道 local::lib 的安装位置,而且您不会绕过指定它,因此您需要一个 shell 命令或环境变量声明。假设您使用了默认值--bootstrap
,这是 bash 中 Perl 查找库的最小示例:
# persistent for this shell only
export PERL5LIB=$PERL5LIB:$(perl -MConfig -e'print "$ENV{HOME}/perl5/lib/perl5/$Config{archname}:$ENV{HOME}/perl5/lib/perl5"')
perl yourprog
perl yourprog
perl yourprog
要不就
# environment for one run of perl only
PERL5LIB=$PERL5LIB:$(perl -MConfig -e'print "$ENV{HOME}/perl5/lib/perl5/$Config{archname}:$ENV{HOME}/perl5/lib/perl5"') perl yourprog
简单地对目录名称进行硬编码是安全的,从而避免了 eval 和对 perl 的调用。
use local::lib;
将从扩展的@INC
. %INC
如果您确实需要,请检查以查看特定位置。
警告:您现在不能使用 local::lib 来安装其他模块,这需要在它打印出来的通常 eval 中进行的其余声明。
使用下面的重新执行技巧从内部设置环境变量。
use autodie qw(:all);
unless ($ENV{REEXEC}) {
$ENV{REEXEC} = 1;
$ENV{PERL5LIB} = …
exec $^X, $0;
}
# main starts here
于 2011-01-12T07:48:52.297 回答
1
尽管我在常规 @INC 的所有盒子上都安装了 local::lib ,但脚本顶部的类似内容应该可以工作,因此它未经测试–</p>
use lib "/path/to/local/lib's/lib";
use local::lib "/path/to/specific/local-lib/base/you/want";
我建议以相同的方式安装 local::lib,在默认的@INC 中使用您的主环境 perl。它可以创建的各种本地存储库与其位置无关。
于 2011-01-14T22:04:38.880 回答