Команда разработчиков Perl объявила о выпуске Perl 5.44. Это первый стабильный релиз в новой серии 5.44, разработка которого велась около 12 месяцев после выхода Perl 5.42.
Самым заметным нововведением языка стала экспериментальная поддержка именованных параметров в сигнатурах подпрограмм. Раньше аргументы в сигнатурах Perl передавались в основном по позиции. Теперь разработчики могут определять параметры, которые вызывающая сторона сможет передавать парами ключ-значение.
Например:
sub create_user ($name, :$email, :$active = 1) {
...
}
create_user("John", email => "john@example.com");
Perl 5.44 также сводит воедино две экспериментальные возможности: многоэлементные циклы foreach и ссылочные алиасы. Теперь можно обрабатывать несколько значений за одну итерацию цикла и объявлять переменные как алиасы для ссылочных данных.
Это позволяет итерироваться по парам ключей и ссылок на массивы, напрямую алиасируя массив:
foreach my ($key, \@items) (%hash) {
say "The $key array contains: @items";
}
Обе возможности, refaliasing и declared_refs, необходимые для такого синтаксиса, остаются экспериментальными.
Также расширена обработка регулярных выражений с модификатором /xx. При включении экспериментальной функции enhanced_xx символьные классы в квадратных скобках можно размещать на нескольких строках и добавлять комментарии. Perl также научился предупреждать, если часть шаблона случайно интерпретируется как комментарий.
Одновременно в Perl 5.44 вводятся новые ограничения для выражений с /xx. Использование неэкранированного символа # или буквального вертикального пробела внутри символьного класса в квадратных скобках теперь считается устаревшим. Существующие выражения пока работают, но выдают предупреждения об устаревании. Их следует обновить, заэкранировав # или заменив на последовательности вроде \n.
Ещё одно важное обновление — поддержка Unicode 17.0. Perl теперь строже соблюдает правила Unicode для идентификаторов и именованных групп регулярных выражений. Около 160 символов, которые раньше допускались благодаря более широкой интерпретации \w, теперь отвергаются, поскольку они не соответствуют свойствам XID_Start и XID_Continue.
Поскольку это изменение нарушает обратную совместимость, разработчикам, использующим нестандартные символы Unicode в именах переменных, пакетов, функций или групп регулярных выражений, стоит проверить код перед обновлением.
В плане безопасности в этом релизе закрыты три уязвимости. CVE-2026-8376 связана с неправильным расчётом размера буфера в функции Perl_study_chunk, что может привести к целочисленному переполнению и записи за пределы буфера на 32-битных системах.
Уязвимость CVE-2026-57432 затрагивает обработку очень больших структур, передаваемых в pack или unpack. Большое значение счётчика повторений могло вызвать целочисленное переполнение и последующее переполнение буфера.
Третья проблема, CVE-2026-13221, связана с оптимизацией через trie-структуры в движке регулярных выражений. Выражения, содержащие более 65 000 альтернативных ветвлений, могли вызвать переполнение 16-битного поля, что потенциально приводило к неверным совпадениям.
В Perl 5.44 также изменён способ инициализации встроенного генератора псевдослучайных чисел. На поддерживаемых системах Linux, BSD и macOS Perl сначала пытается использовать системный вызов getentropy(), затем /dev/urandom, и в крайнем случае хеш внутреннего состояния.
Тем не менее, разработчики подчёркивают, что встроенная реализация rand по-прежнему непригодна для криптографических или иных задач, связанных с безопасностью.
В области производительности несколько типовых операций теперь выполняются быстрее, в том числе сложение, вычитание и умножение целых чисел, гарантирующие отсутствие переполнения, на системах с необходимой поддержкой компилятора.
Также ускорено создание хешей из списков строковых ключей-констант времени компиляции. Обработка сигнатур в начале подпрограмм теперь выполняется с меньшими накладными расходами.
Наконец, удалено давно устаревшее поведение. Использование goto для прыжка извне цикла или блока внутрь его тела, считавшееся устаревшим начиная с Perl 5.12, теперь запрещено.
Дополнительные подробности можно найти в анонсе или в списке всех изменений.
С выходом Perl 5.44 официально прекращена поддержка ветки 5.40. В ближайшие недели ожидается Perl 5.45.1, первый предварительный выпуск для будущей стабильной ветки. Следующий крупный стабильный релиз Perl запланирован на первую половину 2027 года.





Пока нет комментариев. Будьте первым!