След година на разработка беше публикуван релиз на новата стабилна версия на програмния език 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 «Всички числа са четни»; }
- За полета, дефинирани в класа, е реализиран атрибут «: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.
Източник: opennet.ru
