Будут ли все версии Perl поддерживать старые модули? - PullRequest
4 голосов
/ 27 января 2012

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

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

Ответы [ 3 ]

8 голосов
/ 27 января 2012

гарантии нет.

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

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

5 голосов
/ 27 января 2012

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

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

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

5 голосов
/ 27 января 2012

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

Проверьте Матрицу CPAN Tester модуля, включая ссылку о максимальная версия , которая проходит все тесты дистрибутива, чтобы понять, какие версии 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 , если вы хотите скачать, распаковать и собрать дистрибутив самостоятельно.

...