我有自制的#Perl库,我正在从一台机器移动到另一台机器,并且各个路径的路径并不相同。具体来说,在旧机器上,它们存在于/ home / foo / lib /中,而它们正在新机器上移动到/ group / bar / apps / lib,我现在希望将它们放在像/ home /这样的东西中我的/ dev /工具/ lib中。
我们所做的是有多个使用lib行。 / home / foo在新机器上不可用,而/ group / bar不是旧机器上的目录,所以当它看到这个时 -
use lib '/home/foo/lib/' ;
use lib '/group/bar/apps/lib' ;
use Tools::Foo ;
- 一切都很好。
问题是,它们彼此链接,我宁愿在/ home / me / dev / Tools / lib中没有东西从/ group / bar / apps / lib加载程序,当我移动它时东西到生产,我不想有任何指向〜/ me / dev的东西。我希望在将代码移动到生产环境中时不必修改代码,这样,当部署所有内容时,diff /group/bar/apps/lib/Tools/Foo.pm /home/me/dev/Tools/lib/Tools/Foo.pm
将为空。
那么,我如何为多个条件库位置设置东西呢?
答案 0 :(得分:11)
选项:
正确安装模块。
相对于脚本放置模块
use FindBin qw( $RealBin );
use lib "$RealBin/../lib"; # Or whatever.
使用环境变量PERL5LIB
而不是use lib
。
这些陈述可以放在sitecustomize.pl
中(如果在构建sitecustomize.pl
时启用了对perl
的支持)。
答案 1 :(得分:2)
使用以下编译指示
package lib_first_of;
use lib ();
use strict;
use warnings;
use Carp;
sub import {
foreach my $path (@_) {
if (-d $path) {
lib->import($path);
return 1;
}
}
croak "$0: no suitable library path found";
}
1;
让您的主程序具有
形式#! /usr/bin/env perl
use strict;
use warnings;
use lib_first_of (
"/home/foo/lib",
"/group/bar/apps/lib",
);
use MyModule;
print "done.\n";
如果两个路径都不存在,程序将失败并出现类似
的错误my-program: no suitable library path found at my-program line 7 BEGIN failed--compilation aborted at my-program line 9.