Как динамически установить каталог для пользовательских библиотек - PullRequest
1 голос
/ 20 июля 2011

У меня есть несколько довольно сложных библиотек, которые взаимодействуют друг с другом для выполнения некоторой работы, и хотя они в основном работают на наших серверах, они подключаются к некоторым высокопроизводительным серверам для сокращения чисел.

На нашихсерверы, строка ...

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

В высокопроизводительном кластере это больше похоже на ...

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

Для программ, использующих модули, это разумнолегко установить, но я бы не хотел вносить изменения в базу кода для конкретного сервера.Я бы предпочел скопировать каталог как есть.Итак, как мне сказать, чтобы мои модули использовали мою библиотеку dir без жесткого кодирования, как это?

Ответы [ 3 ]

3 голосов
/ 20 июля 2011

Вот к чему мы идем.

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

Если / home / ourgroup / lib не существует на одной машине, пусть будет так. Если / scratch / ourgroup / lib не существует на другом, пусть будет так. Он не жалуется, вот что мы делаем.

3 голосов
/ 20 июля 2011

Обычно вы делаете это, устанавливая переменную окружения PERL5LIB на разных компьютерах по-разному. Да, это не чисто Perl-решение, но оно должно выполняться только один раз для каждого сервера, а не один раз для развертывания.

2 голосов
/ 21 июля 2011

У вас также может быть модуль, который определяет среду и включает в себя правильные каталоги для вас.

Чтобы использовать это, просто сделайте:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...