dsc_0150.jpg

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

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

28.02.2013 22:00 // Код на языке 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';

 

Реклама