如何使用Perl创建条件库?

时间:2013-08-27 13:43:42

标签: perl

我有自制的#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将为空。

那么,我如何为多个条件库位置设置东西呢?

2 个答案:

答案 0 :(得分:11)

选项:

  1. 正确安装模块。

  2. 相对于脚本放置模块

    use FindBin qw( $RealBin );
    use lib "$RealBin/../lib";  # Or whatever.
    
  3. 使用环境变量PERL5LIB而不是use lib

  4. 这些陈述可以放在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.