Dopo un anno di sviluppo, è stato rilasciato il nuovo ramo stabile del linguaggio di programmazione Perl — 5.44. Durante la preparazione del nuovo rilascio, sono state modificate circa 270.000 righe di codice (senza documentazione e codice generato automaticamente — 110.000), le modifiche hanno interessato 860 file, e 71 sviluppatori hanno partecipato allo sviluppo.
Il ramo 5.44 è stato rilasciato secondo un programma fisso approvato tredici anni fa, che prevede il rilascio di nuovi rami stabili una volta l'anno e di rilasci correttivi ogni tre mesi. Circa un mese dopo, è previsto il rilascio del primo aggiornamento correttivo Perl 5.44.1, che correggerà i bug più significativi emersi durante l'implementazione di Perl 5.44.0. Contestualmente al rilascio di Perl 5.44, è stata interrotta la supporto per il ramo 5.40, per il quale futuri aggiornamenti potranno essere rilasciati solo in caso vengano identificate criticità di sicurezza. È iniziato il processo di sviluppo del ramo sperimentale 5.45, da cui verrà formata una versione stabile di Perl 5.46 nella prima metà del 2027, a meno che non si decida di passare alla numerazione 7.x.
Principali modifiche:
- È stata aggiunta una funzionalità sperimentale per l'uso di parametri denominati nelle firme delle funzioni, consentendo di definire l'elenco delle variabili passate alla funzione non nel corpo della funzione, ma al momento della sua dichiarazione. Questa nuova funzionalità permette di passare i parametri non in un ordine rigoroso, ma in un ordine arbitrario utilizzando coppie chiave/valore e la sintassi simile all'assegnazione degli elementi nei hash: Sintassi precedente: sub f { my ($x, $y) = @_; …} f(1, 2); Firme: sub f ($x, $y) { … } f(1, 2); Firme con parametri denominati: sub f (:$x, :$y) { … } f(y => 2, x => 1);
- È stata aggiunta una funzione sperimentale per l'uso degli alias (puntatori a puntatori) nei cicli foreach con più variabili. Questa funzionalità implementata consente di creare un alias nel ciclo foreach estraendo simultaneamente più valori in un'unica iterazione del ciclo. Ad esempio, è possibile formare un alias per un elemento hash con un array durante l'iterazione congiunta di chiavi e valori dell'hash: use v5.44; use feature qw( refaliasing declared_refs ); my %hash = ( one => [1], two => [2, 2], ); foreach my ( $key, \@items ) ( %hash ) { say «L'array $key contiene: @items»; } # Prima della versione 5.44 sarebbe stato necessario dereferenziare: foreach my ( $key, $var ) ( %hash ) { say «L'array $key contiene: @$var»; } # Senza le funzionalità sperimentali refaliasing e declared_refs: foreach my $key (keys %hash) { say «L'array $key contiene: @{$hash{$key}}»; }
- Nelle espressioni regolari è stato implementato un modo sperimentale ‘enhanced_xx’ che consente di utilizzare il modificatore «/xx» con le classi di simboli tra parentesi quadre ([a-zA-Z]) per dividerli su più righe o inserire commenti. Ad esempio, la condizione «if ($text =~ m/[a-zA-Z]/){» può essere scritta così: if ($text =~ m/[ a-z # lettere minuscole A-Z # lettere maiuscole ]/xx) {
- Nel generatore di numeri pseudocasuali, per ottenere entropia viene utilizzata la chiamata di sistema getentropy() su sistemi che la supportano (Linux, BSD, macOS). Su altri sistemi, l'entropia è ottenuta leggendo dal dispositivo /dev/urandom o utilizzando un hash basato sul tempo, sull'ID del processo e sul valore del puntatore.
- Aggiunta la compatibilità con la specifica Unicode 17.0.
- Garantito un rigoroso rispetto delle norme Unicode per i nomi degli identificatori e dei gruppi di espressioni regolari, nei quali ora è vietato utilizzare circa 160 caratteri Unicode che precedentemente rientravano nella classe '\w'. Ad esempio, dalle lettere latine cerchiate, che assomigliano a lettere reali ma non lo sono, è stata esclusa la classe '\w', che includeva tutte le lettere, i numeri e il carattere di sottolineatura. Questa modifica del comportamento riguarda solo i programmi che utilizzano la modalità 'use utf8'.
- Risolte vulnerabilità causate da overflow di buffer nelle funzioni Perl_study_chunk (CVE-2026-8376, visibile nelle builds a 32 bit) e S_measure_struct (CVE-2026-57432), oltre all'overflow del contatore a 16 bit nel motore Regex (CVE-2026-13221), che potrebbe portare a attivazioni errate delle espressioni regolari.
- È vietato l'uso dell'operatore goto per passare a posizioni all'interno di cicli e costrutti a blocchi. Questa possibilità è stata dichiarata obsoleta nel 2010.
- Sono state effettuate ottimizzazioni delle prestazioni che hanno velocizzato le operazioni di somma, sottrazione e moltiplicazione di numeri interi, l'elaborazione delle firme delle funzioni e il riempimento degli hash da liste in formato chiave/valore con chiavi stringa note al momento della compilazione.
Fonte: opennet.ru
