У нас есть ферма сервера, которую мы медленно перемещаем в новую версию 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) подача для обоих деревьев, или я должен связаться в различных каталогах, когда я работаю в различных деревьях (устанавливающий модули)?
Любые модули perl, использующие XS (скомпилированный код C, динамически загружаемый), в целом будут работать только с той же версией perl, с которой они были скомпилированы. Это происходит по двум причинам:
Причина первая состоит в том, что по умолчанию они устанавливаются в каталог, который включает номер версии perl, и любая другая версия perl не просматривает этот каталог.
Причина вторая состоит в том, что API Perl может меняться между основными версиями, поэтому даже если вы скопируете библиотеки в соответствующий каталог, они могут работать или не работать в зависимости от того, какие функции они используют и насколько разные версии perl есть. Между 5.8 и 5.12 есть существенные различия, которые могут нарушить работу почти всего кода.
Это вообще не относится к модулям на чистом Perl ; их можно свободно копировать, за очень немногими исключениями. Проблема только в коде XS.
Проблема будет не в версии Perl, а в базовой платформе. Redhat4 и Redhat5 намного больше отличаются от Perl 5.8.5 и 5.8.8. Фактически, если вы обнаружите разницу между этими версиями, вероятно, это ошибка.
RH4 и RH5 имеют разные наборы библиотек, и собственные расширения Perl необходимо будет перекомпилировать для этих библиотек. Если вы сохраните эти скомпилированные деревья в исходном репозитории, вам действительно понадобятся 2 дерева. Если вы хотите избежать этого, вы можете «статически компилировать», но это становится чрезвычайно беспорядочным и может серьезно повлиять на объем памяти и связанное время загрузки скрипта, что не рекомендуется (а во многих случаях даже невозможно).
Более чистым решением может быть сценарий установки, который загружает / компилирует / устанавливает копии из CPAN и сохраняет дерево исходных текстов свободным от этих артефактов. Вы по-прежнему можете решить, хотите ли вы сделать это как часть установки на целевой машине или как часть сборки двоичного пакета перед установкой на целевую машину.
Некоторые модули Perl компилируются и связываются с системными библиотеками. Если вы обновите свою ОС, есть вероятность, что этих библиотек больше нет, что приведет к неправильной работе этих модулей или их невозможности вообще. Поэтому рекомендуется перекомпилировать ваши модули Perl.
Если вы переустановите новую версию perl с нуля в новой системе, у вас не должно возникнуть проблем, так как во время установки будут использоваться правильные заголовки и библиотеки.