Разные версии Perl требуют разных установок CPAN-модулей? - PullRequest
12 голосов
/ 14 июня 2010

У нас есть ферма серверов, которую мы постепенно переходим на новую версию Perl (5.12.1).В настоящее время мы работаем 5.8.5.Операционная система также будет обновлена ​​с RedHat 4 до RedHat 5, но RedHat 5 все еще возвращается на Perl 5.8.8.Таким образом, некоторое время в нашем дереве исходных текстов мы будем поддерживать две версии Perl.

Мне сказали установить новую версию Perl в наше дерево исходных текстов, а также все модули CPAN, которые мы используем в настоящее время.,Мне фактически сказали «скомпилировать» модули с правильной версией Perl.Я смущен этим.Некоторые модули на самом деле настраивают себя по-разному для разных версий Perl?Учитывая это, я предполагаю, что мне следует настроить каталог CPAN для каждой версии Perl в нашем дереве?

Любая информация или «ошибки» об этом сценарии?

Редактировать: В качестве дополнительного вопросаодин и тот же каталог cpan (на который указывает ~ / .cpan) служит для обоих деревьев, или я должен ссылаться на разные каталоги, когда я работаю в разных деревьях (устанавливаю модули)?

Ответы [ 4 ]

9 голосов
/ 14 июня 2010

Любые модули perl, которые используют XS (скомпилированный код C, динамически загружаемый), будут, как правило, работать только с той версией perl, с которой они были скомпилированы. Это по двум причинам:

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

Вторая причина заключается в том, что Perl API может меняться между основными версиями, поэтому даже если вы скопируете библиотеки в соответствующий каталог, они могут работать или не работать в зависимости от того, какие функции они используют, и насколько отличаются две версии. Perl являются. Между 5.8 и 5.12 есть существенные различия, которые могут сломать почти весь код.

Это совсем не относится к чистым Perl модулям; их можно свободно копировать, за очень немногими исключениями. Проблема заключается только в коде XS.

5 голосов
/ 14 июня 2010

Некоторые модули perl компилируются и связываются с системными библиотеками. Если вы обновите свою ОС, есть вероятность, что эти библиотеки больше не будут присутствовать, что приведет к тому, что эти модули будут работать неправильно или вообще не работать. Поэтому рекомендуется перекомпилировать ваши модули Perl.

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

4 голосов
/ 14 июня 2010

Проблема будет не в версии Perl, а в базовой платформе. Redhat4 и Redhat5 значительно отличаются от Perl 5.8.5 и 5.8.8. На самом деле, если вы обнаружите разницу между этими версиями, это, вероятно, ошибка.

RH4 и RH5 имеют разные наборы библиотек, и собственные расширения perl придется перекомпилировать для этих библиотек. Если вы сохраните эти скомпилированные деревья в своем исходном хранилище, вам действительно понадобятся 2 дерева. Если вы хотите избежать этого, вы можете «статически скомпилировать», но это очень запутанно и может серьезно повлиять на объем памяти и соответствующее время загрузки скрипта, не рекомендуется (а во многих случаях даже невозможно).

Более чистое решение - установочный скрипт, который загружает / компилирует / устанавливает копии из CPAN и сохраняет дерево исходных текстов свободным от этих артефактов. Вы все еще можете решить, хотите ли вы сделать это как часть установки на целевой машине или как часть сборки двоичного пакета перед установкой на целевой машине.

0 голосов
/ 20 августа 2014

Пожалуйста, найдите URL, указанный ниже, чтобы понять, как установить модули для разных CPAN.

http://perllinux.blogspot.in/2014/08/multiple-perl-cpan-on-single-machine.html

И, да, для разных версий Perl нужны модули, которые должны быть установлены на всехих.

...