The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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

03.07.2025 22:30

После года разработки опубликован релиз новой стабильной ветки языка программирования 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{}". Для отключения проверки части кода можно использовать значение "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.


  1. Главная ссылка к новости (https://www.nntp.perl.org/grou...)
  2. OpenNews: Доступен язык программирования Perl 5.40.0
  3. OpenNews: Переполнение буфера в Perl, связанное с обработкой символов
  4. OpenNews: Уязвимость в Perl-модуле Spreadsheet::ParseExcel, используемая для компрометации Barracuda ESG
  5. OpenNews: Доступен язык программирования Perl 5.38.0 с поддержкой классов
  6. OpenNews: Релиз компилятора Rakudo 2023.04 для языка программирования Raku (бывший Perl 6)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/63519-perl
Ключевые слова: perl
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (8) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.13, wd (?), 01:05, 04/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    где-то в обломках 20+летней давности:

    sub all{@_==grep$_,@_}
    sub one{1==grep$_,@_}
    sub none{!grep$_,@_}
    sub any{!&none}

     
  • 1.16, Аноним (16), 01:17, 04/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Год 2025й от рождества христова, кодеры всё ещё не определились с кодировками файлов. Когда определятся, там уже и о строках подумать можно будет.

    Впрочем, booking.com наглядно показал, что язык реализации — десятое дело для любого коммерчески успешного проекта. Жаль, до кодеров это дойдёт приблизительно никогда.

     
  • 1.21, Самый Лучший Гусь (?), 01:30, 04/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Интересный язык с сомобытными идеями который к сожалению уже уходит в разряд ретро

    Сейчас его место занимает python 3

     
  • 1.23, Аноним (23), 06:11, 04/07/2025 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –1 +/
     
  • 1.24, user90 (?), 07:03, 04/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Господа забывают, что такое Perl. А это Practical Extraction and Report Language, и в этой области он по прежнему лучший!
     
     
  • 2.26, Аноним (26), 07:19, 04/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А это уже область ИИ-агентов. Попробуй скормить данные Grok'у, тебе понравится.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру