Доступен язык программирования Perl 5.42

После года разработки опубликован релиз новой стабильной ветки языка программирования Perl — 5.42. При подготовке нового выпуска было изменено около 280 тысяч строк кода (без документации и автоматически сгенерированного кода — 93 тысячи), изменения затронули 1500 файлов, в разработке приняли участие 64 разработчика.

Ветка 5.42 выпущена в соответствии с утверждённым двенадцать лет назад фиксированным графиком разработки, подразумевающим выпуск новых стабильных веток раз в год и корректирующих релизов — раз в три месяца. Примерно через месяц планируется выпустить первый корректирующий релиз Perl 5.42.1, в котором будут исправлены наиболее значительные ошибки, выявленные в процессе внедрения Perl 5.42.0. Одновременно с выходом Perl 5.42 прекращена поддержка ветки 5.38, для которой обновления могут быть выпущены в будущем только в случае выявления критических проблем с безопасностью. В ближайшее время начнётся процесс разработки экспериментальной ветки 5.43, на базе которой в июне 2026 года будет сформирован стабильный релиз Perl 5.44, если не будет принято решение перейти к нумерации 7.x.

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

  • Добавлены экспериментальные операторы обработки списков — «any { BLOCK } @list» и «all { BLOCK } @list», которые напоминают оператор «grep { BLOCK } @list», но могут возвращать только значения true или false. Оператор «all» возвращает «true» при выполнении условия для всех элементов списка, а оператор «any» — при выполнении условия хотя бы для одного элемента. Функциональность операторов аналогична функциям из модуля List::Util, но встроенные варианты быстрее и потребляют меньше памяти.
    
       use v5.42;
       use feature 'keyword_all';
       no warnings 'experimental::keyword_all';
       my @numbers = ...
       if ( all { $_ % 2 == 0 } @numbers ) {
           say "All the numbers are even";
       }
    
  • Для определяемых внутри класса полей реализован атрибут «:writer», применяемый для автоматического создания метода, записывающего значение переменной в поле для текущего экземпляра класса.
    
       class Point {
           field $x :reader :writer :param;
           field $y :reader :writer :param;
       }
       my $p = Point->new( x => 20, y => 40 );
       $p->set_x(60);
    
  • Добавлена поддержка определения лексических методов, которая по аналогии с определением лексических подпрограмм («lexical_subs»), позволяет создавать методы, доступные только в области лексической видимости блока в котором они были созданы. Для создания подобных методов используется выражение «my имя_метода».
  • Добавлен оператор «-›&», позволяющий вызывать подпрограммы, находящиеся в лексической области видимости, так, как будто они являются методами. В сочетании с возможностью определения лексических методов новый оператор реализует функциональность, похожую на приватные методы.
  • Добавлен оператор присвоения «A ^^= B», выполняющий операцию
    «A = A XOR B».

  • Добавлена прагма «source::encoding«, определяющая кодировку исходного кода. Для кода в кодировке ASCII можно указать «use source::encoding ‘ascii'» (по умолчанию), а для UTF-8 — «use source::encoding ‘utf8′», при этом последнее выражение эквивалентно выражению «use utf8». Интерпретатор выведет ошибку, если в коде, помеченном как ASCII, встречаются символы UTF-8, или если в коде, помеченном как UTF-8, используются escape-последовательности «x{}». Для отключения проверки части кода можно использовать значение «use no source::encoding». На практике, добавленная прагма может оказаться полезной для выявления случаев, когда разработчик забыл указать «use utf8» для кода в кодировке UTF-8.
  • В пространство имён «CORE::» добавлена функция chdir(). Например, теперь к данной функции можно обращаться как «&CORE::chdir($dir)» или «my $ref = &CORE::chdir; $ref->($dir)».
  • Добавлено выражение ‘no feature «apostrophe_as_package_separator»‘ для отключения поддержки использования символа » ‘ » в качестве разделителя имён пакетов (например, «My’Module’Var» вместо «My::Module::Var»). Изначально в Perl 5.42 планировалось удалить поддержку подобных разделителей, которые ранее были объявлены устаревшими, но в ходе обсуждений было решено сохранить данную возможность по умолчанию, но предусмотреть опцию для отключения.
  • В число возвращаемых возможностей переведена функциональность «switch» и оператор «~~», которые ранее были помечены устаревшими и были запланированы к удалению. Начиная с выпусков Perl 5.36 и 5.42 возможности «switch» и «~~» по умолчанию отключены при привязке кода к версиям языка (например, при указании «use v5.42»), но могут быть активированы выражениями ‘use feature «switch»‘ и ‘use feature «smartmatch»‘.
  • Добавлена поддержка спецификации Unicode 16.0.

Источник: http://www.opennet.ru/opennews/art.shtml?num=63519