După un an de dezvoltare, a fost lansată noua ramură stabilă a limbajului de programare Perl, versiunea 5.44. În pregătirea noii versiuni, au fost modificate aproximativ 270 de linii de cod (excluzând documentația și codul generat automat - 110 de linii), afectând 860 de fișiere, iar 71 de dezvoltatori au contribuit la dezvoltarea sa.
Ramura 5.44 a fost lansată în conformitate cu programul fix de dezvoltare stabilit acum treisprezece ani, care prevede lansarea de noi ramuri stabile o dată pe an și versiuni minore la fiecare trei luni. Prima versiune minoră, Perl 5.44.1, este programată pentru lansare în aproximativ o lună, remediind cele mai semnificative erori descoperite în timpul implementării Perl 5.44.0. Odată cu lansarea Perl 5.44, suportul pentru ramura 5.40 s-a încheiat; actualizările pentru aceasta ar putea fi lansate în viitor numai dacă sunt descoperite probleme critice de securitate. Dezvoltarea ramurii experimentale 5.45 a început, care va forma baza pentru versiunea stabilă Perl 5.46 în prima jumătate a anului 2027, cu excepția cazului în care se ia o decizie de a trece la numerotarea versiunilor 7.x.
Schimbări cheie:
- Adăugată capacitatea experimentală de a utiliza parametri denumiți în semnăturile funcțiilor. Acești parametri definesc lista de variabile transmise funcției nu în corpul funcției, ci în timpul declarării acesteia. Noua capacitate permite transmiterea parametrilor nu în ordine strictă, ci în orice ordine folosind perechi cheie/valoare și o sintaxă similară cu atribuirea elementelor în hash-uri: Sintaxa veche: sub f { my ($x, $y) = @_; …} f(1, 2); Semnături: sub f ($x, $y) { … } f(1, 2); Semnături cu parametri denumiți: sub f (:$x, :$y) { … } f(y => 2, x => 1);
- A fost adăugat suport experimental pentru utilizarea aliasurilor (pointeri către pointeri) în buclele foreach cu variabile multiple. Această funcție vă permite să creați un alias într-o buclă foreach atunci când se preiau mai multe valori într-o singură iterație a buclei. De exemplu, puteți crea un alias pentru un element hash cu un array atunci când se iterează atât peste cheile, cât și peste valorile hash-ului: use v5.44; use feature qw(refaliasing declared_refs); my %hash = (one => [1], two => [2, 2],); foreach my ($key, \@items) (%hash) { say "Articolele $key conțin: @items"; } # Înainte de versiunea 5.44, era necesară dereferențierea: foreach my ($key, $var) (%hash) { say "Articolele $key conțin: @$var"; } # Fără refliasing experimental și funcții declared_refs: foreach my $key (keys %hash) { say "Tabloul $key conține: @{$hash{$key}}"; }
- Expresiile regulate au acum un mod experimental „enhanced_xx”, care permite utilizarea modificatorului „/xx” cu clase de caractere între paranteze pătrate ([a-zA-Z]) pentru a le împărți pe mai multe linii sau pentru a insera comentarii. De exemplu, condiția „if ($text =~ m/[a-zA-Z]/){” ar putea fi scrisă astfel: if ($text =~ m/[ a-z # litere mici A-Z # litere mari ]/xx) {
- Generatorul de numere pseudo-aleatoare folosește apelul de sistem getentropy() pentru a obține entropia pe sistemele care îl suportă (Linux, BSD, macOSPe alte sisteme, entropia se obține citind de pe dispozitivul /dev/urandom sau utilizând un hash al timpului, ID-ului procesului și valorii pointerului.
- S-a adăugat suport pentru specificația Unicode 17.0.
- Respectarea strictă a regulilor Unicode a fost asigurată pentru numele identificatorilor și grupurile de expresii regulate, aproximativ 160 de caractere Unicode acoperite anterior de clasa „\w” fiind acum interzise. De exemplu, clasa „\w”, care acoperă toate literele, cifrele și caracterul de subliniere, exclude acum literele latine încercuite, care seamănă cu literele reale, dar nu sunt. Această modificare de comportament afectează doar programele care utilizează modul „use utf8”.
- Au fost remediate vulnerabilități de tip buffer overflow în funcțiile Perl_study_chunk (CVE-2026-8376, care afectează versiunile pe 32 de biți) și S_measure_struct (CVE-2026-57432), precum și un overflow de contor pe 16 biți în motorul Regex (CVE-2026-13221), care putea duce la execuția incorectă a unei expresii regulate.
- Saltul la poziții în cadrul buclelor și construcțiilor de bloc folosind operatorul goto este interzis. Această funcționalitate a fost depreciată în 2010.
- Au fost făcute optimizări de performanță pentru a accelera adunarea, scăderea și înmulțirea numerelor întregi, procesarea semnăturilor funcțiilor și popularea hash-urilor din listele cheie/valoare cu chei de tip șir de caractere cunoscute la momentul compilării.
Sursa: opennet.ru
