Различные версии Perl требуют различных установок модуля CPAN?

У нас есть ферма сервера, которую мы медленно перемещаем в новую версию 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) подача для обоих деревьев, или я должен связаться в различных каталогах, когда я работаю в различных деревьях (устанавливающий модули)?

12
задан Leonard 15 June 2010 в 19:27
поделиться

3 ответа

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

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

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

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

9
ответ дан 2 December 2019 в 19:52
поделиться

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

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

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

4
ответ дан 2 December 2019 в 19:52
поделиться

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

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

5
ответ дан 2 December 2019 в 19:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: