После 13 месяцев разработки состоялся релиз новой стабильной ветки языка программирования Perl — 5.28. При подготовке нового выпуска было изменено около 730 тыс. строк кода, изменения затронули 2200 файлов, в разработке приняли участие 77 разработчиков.

Ветка 5.28 выпущена в соответствии с утверждённым пять лет назад фиксированным графиком разработки, подразумевающим выпуск новых стабильных веток раз в год и корректирующих релизов — раз в три месяца. Примерно через месяц планируется выпустить первый корректирующий релиз Perl 5.28.1, в котором будут исправлены наиболее значительные ошибки, выявленные в процессе внедрения Perl 5.28.0. Одновременно с выходом Perl 5.28 прекращена поддержка ветки 5.24, для которой в будущем могут быть выпущены обновления только в случае выявления критических проблем с безопасностью. Также начался процесс разработки экспериментальной ветки 5.29, на базе которой в апреле или мае или июне 2019 года будет сформирован стабильный релиз Perl 5.30.

Ключевые изменения:

  • С дополнительных bitwise-операторов для побитовой работы со строками (&. |. ^. ~.) и числами (& | ^ ~) снят статус экспериментальной функциональности. Так как новые числовые операторы теперь явно привязываются к контексту (например, «~» всегда рассматривает аргумент как число, а «~.» как строку, т.е. ~0 и ~»0″ приведёт к одинаковому результату 2**32-1, а ~.0 и ~.»0″ выдаст «\xff»), они
    доступны только при указании флага «use feature ‘bitwise'» или «use v5.28», а также при запуске интерпретатора с опцией «-E»;

  • Повышена безопасность использования режима редактирования обрабатываемых файлов «perl -i» (например, вызов «perl -pi -e ‘s/TEST1/TEST2/g’ test.txt» приводит к замене всех строк TEST1 на TEST2 в файле test.txt, в то время как при запуске без «-i» изменённый вариант выводится в STDOUT, а исходный файл остаётся нетронут). Ранее перед началом сохранения результата входной файл переименовывался или удалялся, что могло привести к потере данных в случае сбоя во время сохранения результата, например, в случае переполнения диска. Отныне результат сохраняется в новый файл, который заменяет собой исходный файл только после успешного завершения записи;
  • Добавлена поддержка Unicode 10.0;
  • Оператор «delete» теперь может применяться для удаления секций «%» в хэшах, помимо «$» и «@», с возвратом ключей и значений удалённых элементов. Например, теперь можно использовать конструкции вида «my %sanitised_values = delete %input_values{@allowed_keys} ;»
  • Добавлен новый набор экспериментальных символьных синонимов для некоторых операторов регулярных выражений. Например, вместо «(?