După un an de dezvoltare, a fost publicată o nouă versiune stabilă a limbajului de programare Perl — 5.42. În pregătirea noului release, au fost modificate aproximativ 280 de mii de linii de cod (fără documentație și cod generat automat — 93 de mii), modificările au afectat 1500 de fișiere, iar la dezvoltare au participat 64 de dezvoltatori.
Ramura 5.42 a fost lansată conform unui program fix aprobat cu douăsprezece ani în urmă, care prevede lansarea de noi ramuri stabile o dată pe an și actualizări corective — o dată la trei luni. Aproximativ în luna următoare, se preconizează lansarea primei actualizări corective Perl 5.42.1, în care vor fi corectate cele mai semnificative erori identificate în procesul de implementare a Perl 5.42.0. Odată cu lansarea Perl 5.42, suportul pentru ramura 5.38 a fost oprit, pentru care actualizările pot fi lansate în viitor doar în cazul identificării unor probleme critice de securitate. În curând va începe procesul de dezvoltare a ramurii experimentale 5.43, pe baza căreia, în iunie 2026, va fi format un release stabil Perl 5.44, dacă nu se va decide să se treacă la numerotarea 7.x.
Modificări cheie:
- Au fost adăugați operatori experimentali pentru prelucrarea listelor — „any { BLOCK } @list” și „all { BLOCK } @list”, care sunt similari operatorului „grep { BLOCK } @list”, dar pot returna doar valori true sau false. Operatorul „all” returnează „true” atunci când condiția este îndeplinită pentru toate elementele listei, iar operatorul „any” — atunci când condiția este îndeplinită pentru cel puțin un element. Funcționalitatea operatorilor este similară funcțiilor din modulul List::Util, dar variantele încorporate sunt mai rapide și consumă mai puțină memorie. use v5.42; use feature ‘keyword_all’; no warnings ‘experimental::keyword_all’; my @numbers = … if ( all { $_ % 2 == 0 } @numbers ) { say «Toate numerele sunt pare»; }
- Pentru câmpurile definite în interiorul clasei, a fost implementat atributul „:writer”, folosit pentru a crea automat o metodă care scrie valoarea unei variabile în câmpul pentru instanța curentă a clasei. class Point { field $x :reader :writer :param; field $y :reader :writer :param; } my $p = Point->new( x => 20, y => 40 ); $p->set_x(60);
- A fost adăugată suportul pentru definirea metodelor lexicale, care, similar definirii subprogramelor lexicale ("lexical_subs"), permite crearea de metode accesibile doar în domeniul de vizibilitate lexical al blocului în care au fost create. Pentru a crea astfel de metode, se folosește expresia "my nume_metodă".
- A fost adăugat operatorul "->&", care permite apelarea subprogramelor aflate în domeniul de vizibilitate lexical, ca și cum ar fi metode. Împreună cu posibilitatea de a defini metode lexicale, noul operator implementează o funcționalitate similară metodelor private.
- A fost adăugat operatorul de asignare "A ^^= B", care efectuează operația "A = A XOR B".
- A fost adăugată pragma "source::encoding", care definește codificarea codului sursă. Pentru codul în codificare ASCII, se poate specifica "use source::encoding 'ascii'" (implicit), iar pentru UTF-8 – "use source::encoding 'utf8'"; această ultimă expresie este echivalentă cu "use utf8". Interpretorul va returna o eroare dacă în codul marcat ca ASCII apar caractere UTF-8, sau dacă în codul marcat ca UTF-8 sunt utilizate secvențe de escape "\x{}". Pentru a dezactiva verificarea unei părți a codului, se poate utiliza valoarea "use no source::encoding". În practică, pragma adăugată poate fi utilă pentru a identifica cazurile în care dezvoltatorul a uitat să specifice "use utf8" pentru codul în codificare UTF-8.
- În spațiul de nume "CORE::" a fost adăugată funcția chdir(). De exemplu, acum se poate apela această funcție ca "&CORE::chdir($dir)" sau "my $ref = \&CORE::chdir; $ref->($dir)".
- A fost adăugată expresia ‘no feature "apostrophe_as_package_separator"‘ pentru a dezactiva suportul pentru utilizarea simbolului » ‘ » ca separator de nume de pachete (de exemplu, „My’Module’Var” în loc de „My::Module::Var”). Inițial, în Perl 5.42, s-a propus eliminarea suportului pentru astfel de separatori, care anterior au fost declarați ca fiind învechiți, dar în urma discuțiilor s-a decis să se păstreze această posibilitate în mod implicit, dar cu o opțiune de dezactivare.
- Printre funcționalitățile restituite, s-au reintrodus funcționalitatea „switch” și operatorul „~~”, care anterior erau marcate ca fiind învechite și planificate pentru eliminare. Începând cu versiunile Perl 5.36 și 5.42, funcționalitățile „switch” și „~~” sunt dezactivate în mod implicit atunci când codul este legat de versiunile limbajului (de exemplu, prin specificarea „use v5.42”), dar pot fi activate prin expresiile ‘use feature «switch»‘ și ‘use feature «smartmatch»‘.
- S-a adăugat suport pentru specificația Unicode 16.0.
Sursa: opennet.ro
