След година на разработка беше публикувано издание на новата стабилна версия на езика за програмиране Perl — 5.42. При подготовката на новото издание бяха променени около 280 000 реда код (без документация и автоматично генериран код — 93 000), измененията засегнаха 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
