Perl 5.44

После года разработки опубликован релиз новой стабильной ветки языка программирования Perl — 5.44. При подготовке нового выпуска было изменено около 270 тысяч строк кода (без документации и автоматически сгенерированного кода — 110 тысяч), изменения затронули 860 файлов, в разработке принял участие 71 разработчик.
Ветка 5.44 выпущена в соответствии с утверждённым тринадцать лет назад фиксированным графиком разработки, подразумевающим выпуск новых стабильных веток раз в год и корректирующих релизов — раз в три месяца. Примерно через месяц планируется выпустить первый корректирующий релиз Perl 5.44.1, в котором будут исправлены наиболее значительные ошибки, выявленные в процессе внедрения Perl 5.44.0. Одновременно с выходом Perl 5.44 прекращена поддержка ветки 5.40, для которой обновления могут быть выпущены в будущем только в случае выявления критических проблем с безопасностью. Начался процесс разработки экспериментальной ветки 5.45, на базе которой в первой половине 2027 года будет сформирован стабильный релиз Perl 5.46, если не будет принято решение перейти к нумерации 7.x.
Ключевые изменения:
- Добавлена экспериментальная возможность использования именованных параметров в сигнатурах функций, определяющих перечень передаваемых в функцию переменных не в теле функции, а при её объявлении. Новая возможность позволяет передавать параметры не в строгом порядке следования, а в произвольном порядке с использованием пар ключ/значения и синтаксиса как при назначении элементов в хэшах:
- старый синтаксис:
sub f { my ($x, $y) = @_; ...} f(1, 2); - сигнатуры:
sub f ($x, $y) { ... } f(1, 2); - сигнатуры с именованными параметрами:
sub f (:$x, :$y) { ... } f(y => 2, x => 1);
- старый синтаксис:
- Добавлена экспериментальная возможность использования алиасов (указателей на указатели) в циклах
foreachс несколькими переменными. Реализованная возможность позволяет создавать алиас в цикле foreach при единовременном извлечением сразу нескольких значений в одной итерации цикла. Например, можно сформировать алиас для элемента хэша c массивом при переборе разом ключей и значений хэша:use v5.44; use feature qw( refaliasing declared_refs ); my %hash = ( one => [1], two => [2, 2], ); foreach my ( $key, \@items ) ( %hash ) { say "The $key array contains: @items"; } # До версии 5.44 потребовалось бы выполнять разыменование: foreach my ( $key, $var ) ( %hash ) { say "The $key array contains: @$var"; } # Без экспериментальных возможностей refaliasing и declared\_refs: foreach my $key (keys %hash) { say "The $key array contains: @{$hash{$key}}"; } - В регулярных выражениях реализован экспериментальный режим «enhanced_xx», позволяющий использовать модификатор
/xxс классами символов в квадратных скобках([a-zA-Z])для их разделения на несколько строк или подстановки комментариев. Например, условиеif ($text =~ m/\[a-zA-Z]/){можно оформить так:if ($text =~ m/[ a-z # строчные буквы A-Z # заглавные буквы ]/xx) { - В генераторе псевдослучайных чисел для получения энтропии задействован системный вызов getentropy () на системах с его поддержкой (Linux, BSD, macOS). На остальных системах для получения энтропии осуществляется чтение из устройства /dev/urandom или использование хэша от времени, идентификатора процесса и значения указателя.
- Добавлена поддержка спецификации Unicode 17.0.
- Обеспечено строгое соблюдение правил Unicode для имён идентификаторов и групп регулярных выражений, в которых теперь запрещено использовать около 160 Unicode-символов, ранее подпадавших под класс
\w. Например, из действия класса\w, охватывающего все буквы, цифры и символ подчеркивания, выведены латинские буквы в кружках, которые напоминают реальные буквы, но ими не являются. Изменение поведения затрагивает только программы, использующие режимuse utf8. - Устранены уязвимости, вызванные переполнениями буфера в функциях
Perl_study_chunk(CVE-2026–8376, проявляется в 32-разрядных сборках) иS_measure_struct(CVE-2026–57432), а также переполнение 16-разрядного счётчика в Regex-движке (CVE-2026–13221), что может привести к неверному срабатыванию регулярного выражения. - Запрещён переход при помощи оператора
gotoна позиции внутри циклов и блочных конструкций. Данная возможность была объявлена устаревшей в 2010 году. - Проведены оптимизации производительности, ускорившие операции сложения, вычитания и умножения целых чисел, обработку сигнатур функций и заполнение хэшей из списков в формате ключ/значение с известными на этапе компиляции строковыми ключами.
>>> Источник: OpenNET
