Perlbrew

13 окт 2012 12:30


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

Я весьма долго обходил его стороной, поскольку он просто не был нужен в повседневной работе. Так называемый "Системный" Perl хорошо поддерживается и каждый год обновляется до последней стабильной версии в моём дистрибутиве. Поэтому можно писать код, использующий любые современные фичи и быть уверенным, что он заработает в моей системе. Но, как оказалось, perlbrew здорово может помочь при тестировании программ на старых версиях Perl или в условии специфических сборок.

↓↓↓↓↓↓↓↓

Установка и использование perlbrew

Установить perlbrew достаточно просто, во многих дистрибутивах Linux он присутствует. Если же его нет в пакетах или хочется поставить самую последнюю версию, можно установить и настроить через cpan.

sudo cpan App::perlbrew
perlbrew init

По умолчанию корневым каталогом perlbrew является ~/perl5/perlbrew. Именно здесь будут разворачиваться инсталляции Perl. Изменить это умолчание можно выставив переменную окружения PERLBREW_ROOT в нужное значение, например:

export PERLBREW_ROOT=/opt/perlbrew

Теперь можно попробовать установить сборку Perl 5.16.1

perlbrew install perl-5.16.1

Сборка может длиться достаточно долго, и нетерпеливые могут указать опцию -n , чтобы при сборке не проводились тесты. Если сборка прошла успешно, то можно переключиться на использование нового Perl одной командой

perlbrew switch perl-5.16.1

Если требуется временное переключение в пределах одного открытого сеанса shell, можно использовать команду use

perlbrew use perl-5.16.1

Отключить perlbrew и начать использовать системный perl можно командой switch-off

perlbrew switch-off

Также можно запускать Perl-программу с нужной версией Perl:

perlbrew exec --with perl-5.16.1 myscript.pl

Больше информации об опциях perlbrew можно прочитать в документации: perldoc perlbrew

Специальные сборки Perl

В perlbrew существует возможность передать необходимые флаги в параметры скрипта конфигурации сборки Perl, чтобы получить сборку Perl с тем набором фич, которые вам требуются.

По умолчанию Perl конфигурируется следующим образом:

sh Configure -de -Duserelocatableinc -Dprefix=$PERLBREW_ROOT/perls/<name>

Рассмотрим, что означают эти параметры командной строки.

Флаги:

-d - использовать ответы по умолчанию
-e -  не задавать вопросов 

Установка символов (-D):

 userelocatableinc - фича, которая позволяет перемещать вам $PERLBREW_ROOT и perl будет автоматически корректировать @INC в зависимости от положения бинарника perl

 prefix - корневой каталог установки Perl

Чтобы передать другие параметры скрипту конфигурации в perlbrew нужно использовать опции -D, -U -A, которые аналогичны тем параметрам, которые принимает скрипт конфигурации:

 -Dсимвол - определяет символ

 -Uсимвол - удаляет определение символа

 -Aдействие:символ - изменяет символ необходимым образом

Чтобы изменить флаги конфигурации (-d -e и т.д.) можно установить переменную окружения PERLBREW_CONFIGURE_FLAGS, например:

export PERLBREW_CONFIGURE_FLAGS='-des'

где флаг -s делает сборку менее многословной.

Например сборка Perl с поддержкой threads делается следующим образом:

perlbrew install perl-5.16.1 -Dusethreads -Duseithreads

Если вы хотите собрать perl в виде динамической разделяемой библиотеки:

perlbrew install perl-5.16.1 -Duseshrplib

Правда в этом случае вы не сможете использовать возможность перемещаемого @INC.

Узнать больше об опциях инсталляции нужной вам версии Perl можно в документации, например, для Perl-5.16.1

Применение патчей к исходному коду

Perlbrew активно использует модуль Devel::PatchPerl , который требуется, когда вы хотите собрать старую версию Perl на современной платформе, современным компилятором и т.д. Модуль содержит необходимые патчи, которые исправляют ошибки сборки для разнообразных версий Perl.

Поэтому если у вас накопилась коллекция полезных патчей, вы можете оформить их в виде плагина для Devel::PatchPerl, и прозрачно использовать их в perlbrew.

Например, я сделал плагин Devel::PatchPerl::Plugin::ALTLinux , который применяет патчи, которые используются в сборке Perl в дистрибутиве ALTLinux и также выставляет по-умолчанию нужные значения символов. Теперь на произвольной системе я могу с помощью perlbrew собрать Perl - такой же как в ALTLinux командой:

PERL5_PATCHPERL_PLUGIN=ALTLinux perlbrew install perl-5.16.1

Первая версия пока поддерживает только последнюю версию perl 5.16.1, но потом будут добавлены версии 5.12.3, 5.14.2 и может быть 5.8.9.

Теги: perl perlbrew ALT

Обновлён: 2012-10-13 12:35


Комментарии (2)

Oleg

2014-08-24 14:21

Спасибо за статью! Очень помогла!


Zen_nudist

2015-06-04 08:02

Благодарю за статью!


Оставить комментарий