如何为用户指定的库动态设置目录

时间:2011-07-20 15:43:25

标签: perl

我有一些相当复杂的库,它们相互连接以完成一些工作,虽然它们主要在我们的服务器上运行,但是它们连接到一些高性能服务器来处理数字。

在我们的服务器上,该行是......

 use lib '/home/ourgroup/lib' ;
 use HomeGrown::Code ':all' ;

在高性能集群上,它更像是......

use lib '/scratch/ourgroup/lib' ;
use HomeGrown::Code ':all' ;

对于使用这些模块的程序,这是一个相当容易设置的东西,但我不想在代码库中进行特定于服务器的更改。我宁愿能够按原样复制目录。那么,如何告诉我的模块使用我的库目录而不用硬编码呢?

3 个答案:

答案 0 :(得分:3)

通常,您可以通过在不同的计算机上设置不同的PERL5LIB环境变量来实现此目的。是的,它不是纯Perl解决方案,但每个服务器只需执行一次,而不是每次部署一次。

答案 1 :(得分:3)

这就是我们的目标。

use lib '/home/ourgroup/lib' ;
use lib '/scratch/ourgroup/lib' ;

如果/ home / ourgroup / lib在一台机器上不存在,那就这样吧。如果/ scratch / ourgroup / lib不存在,那么就这样吧。它没有抱怨,所以这就是我们正在做的事情。

答案 2 :(得分:2)

您还可以拥有一个检测环境的模块,并为您提供正确的目录。

要使用它,只需执行:

use VarLogRant::FindLibs; 
use Stuff;

编写模块:

package VarLogRant::Findlibs;

sub select_lib_dirs {

    my @libs;

    push @libs, '/home/ourgroup/libs' if need_home();
    push @libs, '/scratch/ourgroup/libs' if need_scratch();

    # Any other magical logic you want.

}

# It is critical that use lib comes AFTER the functions are defined.
use lib select_lib_dirs();

1;