Perl 5.44


3

Dopo un anno di sviluppo pubblicato rilascio di un nuovo ramo stabile del linguaggio di programmazione Perl — 5.44. Durante la preparazione nel nuovo rilascio sono state modificate circa 270.000 righe di codice (senza la documentazione e il codice generato automaticamente — 110.000), le modifiche hanno interessato 860 file, 71 sviluppatori hanno partecipato allo sviluppo.

Il ramo 5.44 è stato rilasciato secondo il programma fisso approvato tredici anni fa, che prevede il rilascio di nuovi rami stabili una volta all'anno e aggiornamenti correttivi ogni tre mesi. Circa tra un mese è previsto il rilascio del primo aggiornamento correttivo Perl 5.44.1, che correggerà i problemi più significativi emersi durante l'implementazione di Perl 5.44.0. Con il rilascio di Perl 5.44, il supporto per il ramo 5.40 è stato interrotto, per il quale gli aggiornamenti potranno essere rilasciati in futuro solo in caso di rilevamento di problemi critici di sicurezza. È iniziato il processo di sviluppo del ramo sperimentale 5.45, sulla base del quale nella prima metà del 2027 sarà formato un rilascio stabile di Perl 5.46, a meno che non venga presa la decisione di passare alla numerazione 7.x.

Chiave modifiche:

  • Aggiunto opzione sperimentale per l'uso di parametri nominati in firmware funzioni, che definiscono l'elenco delle variabili passate alla funzione non nel corpo della funzione, ma al momento della sua dichiarazione. Questa nuova funzionalità consente di passare i parametri non in un ordine rigoroso, ma in un ordine arbitrario utilizzando coppie chiave/valore e la sintassi come per l'assegnazione degli elementi negli hash:
    • sintassi vecchia: sub f { my ($x, $y) = @_; …} f(1, 2);
    • sintassi con firme: sub f ($x, $y) { … } f(1, 2);
    • sintassi con parametri nominati: sub f (:$x, :$y) { … } f(y => 2, x => 1);
  • È stata aggiunta una funzionalità sperimentale per utilizzare alias (puntatori a puntatori) nei cicli foreach con più variabili. Questa funzione implementata consente di creare un alias nel ciclo foreach mentre si estrae 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 simultanea delle chiavi e dei 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 eseguire la dereferenziazione: foreach my ( $key, $var ) ( %hash ) { say "L'array $key contiene: @$var"; } # Senza le funzionalità sperimentali di refaliasing e declared_refs: foreach my $key (keys %hash) { say "L'array $key contiene: @{$hash{$key}}"; }
  • Nelle espressioni regolari implementato modalità sperimentale ‘enhanced_xx’, che consente di utilizzare il modificatore /xx con le classi di caratteri tra parentesi quadre ([a-zA-Z]) per dividerle su più righe o per inserire commenti. Ad esempio, la condizione if ($text =~ m/[a-zA-Z]/) può essere formattata in questo modo: if ($text =~ m/[ a-z # lettere minuscole A-Z # lettere maiuscole ]/xx) {
  • Nel generatore di numeri pseudocasuali, la chiamata di sistema getentropy() viene utilizzata per ottenere entropia su sistemi che lo supportano (Linux, BSD, macOS). Su altri sistemi, l'entropia viene ottenuta leggendo dal dispositivo /dev/urandom o utilizzando un hash basato su tempo, identificatore di processo e valore di puntatore.
  • Aggiunta la compatibilità con la specifica Unicode 17.0.
  • Garantito il rigoroso rispetto delle regole Unicode per i nomi degli identificatori e dei gruppi di espressioni regolari, in cui ora è vietato utilizzare circa 160 caratteri Unicode, precedentemente inclusi nella classe w. Ad esempio, le lettere latine in cerchio, che somigliano a lettere reali ma non lo sono, sono state escluse dall'operazione della classe w, che comprende tutte le lettere, i numeri e il carattere di sottolineatura. La modifica del comportamento influisce solo sui programmi che utilizzano la modalità use utf8.
  • Risolte le vulnerabilità causate da buffer overflow nelle funzioni Perl_study_chunk (CVE-2026-8376, presente nelle build a 32 bit) e S_measure_struct (CVE-2026-57432), così come il buffer overflow del contatore a 16 bit nel motore Regex (CVE-2026-13221), il quale può causare un errato funzionamento dell'espressione regolare.
  • È 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: linux.org.ru

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster