Столкнулся с неожиданной для себя проблемой - установкой пользовательских модулей 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`;