Все ли версии Perl будут поддерживать старые модули?

У меня на всех наших серверах установлен Perl 5.8, и я хотел использовать модули DBI и DBD :: Oracle для доступа к нашим базам данных. Меня больше всего беспокоит то, что в новых версиях Perl модули DBI и DBD перестанут работать с 5.8. Тогда мне пришлось бы обновить каждый сервер до последней версии Perl.

У меня вопрос, поскольку perl сам становится более поздними версиями и для них разрабатываются модули, будут ли они по-прежнему иметь обратную совместимость? «CPAN не поддерживает все старые выпуски и уровни исправлений Perl», если я создам документацию, в которой говорится, что выполните «cpan -i DBI», если новейшая версия DBI не будет работать с 5.8?


person LF4    schedule 26.01.2012    source источник
comment
Perl 5.8 - это три основные версии после текущей стабильной версии Perl 5. Я бы рекомендовал выполнить обновление, по крайней мере, для вашего внутреннего программного обеспечения. Вы можете использовать Perlbrew для установки более свежего Perl без вмешательства в системный Perl (от которого могут зависеть системные инструменты, предоставляемые вашим дистрибутивом).   -  person Quentin    schedule 27.01.2012
comment
CPAN поддерживает только последнюю версию модуля - это неправда - вы можете загрузить любую старую версию модуля, которая все еще размещена на сервере CPAN (и требуются особые усилия, чтобы удалить старую версию из распространения, поэтому многие авторы никогда не заморачиваются). Если в дистрибутиве прекращается поддержка определенной версии Perl, вы можете попросить авторов модуля оставить более старую версию на CPAN для поддержки старых пользователей.   -  person Ether    schedule 27.01.2012
comment
Вы также можете найти эту статью по использованию: Визуализация политики поддержки Perl 5   -  person Ether    schedule 27.01.2012


Ответы (3)


Нет никаких гарантий.

Как правило, вы хотите использовать одни и те же версии модулей во всех своих системах. Если вы используете разные версии, у вас будут разные ошибки и функции, доступные на разных серверах.

Я бы предложил создать Debs / RPMS / etc для тех, которые вы собираетесь использовать, а затем запустить репозиторий пакетов, который будет использоваться всеми вашими серверами.

person Quentin    schedule 26.01.2012
comment
Да, я согласен, единственный способ, которым я смотрел на установку той же версии, но он говорил о создании зеркала CPAN, чтобы сделать это. Некоторые из серверов являются системами Windows, поэтому я хотел бы выполнить установку типа CPAN вместо создания пакетов. - person LF4; 27.01.2012

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

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

cpan -i Some::Module действительно попытается установить последнюю версию модуля Some::Module, но после небольшого исследования его можно использовать и для установки более старых версий. Вам нужно найти или угадать автора более старой версии и указать путь к раздаче на зеркальных серверах CPAN. Например,

cpan -i J/JF/JFRIEDL/Yahoo-Search-1.9.12.tar.gz

cpan -i A/AS/ASG/List-Gen-0.80.tar.gz

Авторы CPAN могут удалить свои старые дистрибутивы из CPAN. Но даже в этом случае дистрибутив доступен по адресу BackPAN, если вы хотите скачать, распаковать и собрать распространение самостоятельно.

person mob    schedule 26.01.2012

Не совсем, но в целом Perl довольно осторожен в взломе кода, с небольшим количеством критических изменений и долгими циклами устаревания тех, которые действительно случаются. Довольно большая часть кода, который был загружен в CPAN в 1999 году, будет работать без изменений в perl 5.14.

Начиная с Perl 5.12 цикл выпуска Perl стал короче, и периоды прекращения поддержки также стали короче, что является поводом для беспокойства, но в то же время концепция управления версиями функций получила распространение. Идея состоит в том, что код может объявлять версию perl, на которую он нацелен с помощью use VERSION (например, use 5.16.0), и любой код, который не объявляет версию, предполагается, что ориентирован примерно на 5.10. Когда код, ориентированный на более старую версию Perl, запускается на новой версии Perl, новые функции, которые могут вызвать проблемы совместимости (например, новые ключевые слова), отключаются, а старые неправильные функции могут быть повторно включены во имя совместимости. Это не абсолютная гарантия, но она будет соблюдаться в максимально возможной степени.

Дополнительная информация об обратной совместимости и устаревании находится в perlpolicy.

person hobbs    schedule 27.01.2012