dsc_0150.jpg
Menu
Perl & JS

Установка модулей Perl на Masterhost


Особенности настройки CPAN shell

MILKOV.RU

Блог / Perl & JS
Установка модулей Perl на Masterhost — Особенности настройки CPAN shell

Код на языке Perl
Связанные материалы:


Столкнулся с неожиданной для себя проблемой - установкой пользовательских модулей Perl из CPAN на хостинге Masterhost. Действие, записываемое максимально двумя строчками вылилось в четыре часа поисков решения.

Вроде, что может быть проще, зайти в оболочку CPAN:

$ perl -MCPAN -e shell

и установить требуемый модуль:

> install <имя_модуля>

Но, не тут-то было!

Сконфигурированный по-умолчанию CPAN после получения данной команды "радостно" компилировал зависимые и основной модули, но отказывался их устанавливать. Штатная "отписка" из технической документации с предложением указать в конфигурации PREFIX для Makefile.PL приводила к многочисленным ошибкам на этапе компиляции и тестирования.

В итоге методом проб и ошибок в течение нескольких часов было найдено следующее решение по настройке CPAN для работы с пользовательским каталогом (~/perl):

1. Добавляем в переменную окружения PERL5LIB пути:

$ PERL5LIB=~/perl/lib/perl5:~/perl/lib/perl5/site_perl:~/perl/lib/perl5/site_perl/5.12.4:~/perl/lib/perl5/site_perl/5.12.4/mach 
$ export PERL5LIB

проверить переменную @INC и наличие требуемых путей можно из Perl:

$ perl -le `print foreach @INC`

версия Perl (если она отлична от используемой 5.12.4) выясняется стандартно:

$ perl -v

2. Конфигурируем CPAN с помощью:

cpan[1]> o conf <имя_параметра> `<значение_параметра>`

или, в случае диалогового ввода:

cpan[1]> o conf init <имя_параметра> 
[текущее_значение]:<новое_значение>

Суммарно, необходимо изменить следующее:

cpan[1]> o conf makepl_arg `PREFIX=~/perl/`
cpan[1]> o conf make_install_arg `INSTALLBIN=~/perl/bin INSTALLMAN3DIR=~/perl/lib/perl5/man/man3`
cpan[1]> o conf mbuild_arg `INSTALLBIN=~/perl/bin INSTALLMAN3DIR=~/perl/lib/perl5/man/man3 --extra_linker_flags -L~/perl/lib`
cpan[1]> o conf mbuildpl_arg `--install_base ~/perl`

В конце не забываем сохранить изменения:

cpan[1]> o conf commit

3. Теперь можно устанавливать требуемые модули:

cpan[1]> install <имя_модуля>

UPDATE

Для использования установленных модулей из Perl все-таки придется прописывать вручную @INC, причем, что весьма странно, все пути:

push @INC, `~/perl/lib/perl5`;
push @INC, `~/perl/lib/perl5/site_perl`;
push @INC, `~/perl/lib/perl5/site_perl/5.12.4`;
push @INC, `~/perl/lib/perl5/site_perl/5.12.4/mach`;
use lib `~/perl`;