Dopo un anno di sviluppo, è stato rilasciato il nuovo ramo stabile del linguaggio di programmazione Perl — 5.42. Durante la preparazione di questa nuova versione, sono state modificate circa 280.000 righe di codice (senza documentazione e codice generato automaticamente — 93.000), coinvolgendo 1.500 file e 64 sviluppatori.
Il ramo 5.42 è stato rilasciato secondo il programma di sviluppo fisso approvato dodici anni fa, che prevede il rilascio di nuovi rami stabili ogni anno e aggiornamenti correttivi ogni tre mesi. È prevista l'uscita del primo aggiornamento correttivo Perl 5.42.1 tra circa un mese, in cui saranno corretti i bug più significativi emersi durante l'implementazione di Perl 5.42.0. Contestualmente al rilascio di Perl 5.42, è terminato il supporto per il ramo 5.38, per il quale gli aggiornamenti potranno essere rilasciati in futuro solo in caso di problemi critici di sicurezza. A breve inizierà il processo di sviluppo del ramo sperimentale 5.43, su cui sarà basata la versione stabile Perl 5.44, prevista per giugno 2026, salvo decisioni di passare alla numerazione 7.x.
Principali modifiche:
- Sono stati aggiunti operatori sperimentali per la gestione delle liste — «any { BLOCK } @list» e «all { BLOCK } @list», che assomigliano all'operatore «grep { BLOCK } @list», ma possono restituire solo valori true o false. L'operatore «all» restituisce «true» se la condizione è soddisfatta per tutti gli elementi della lista, mentre l'operatore «any» restituisce «true» se la condizione è soddisfatta per almeno un elemento. La funzionalità degli operatori è simile a quella delle funzioni del modulo List::Util, ma le varianti integrate sono più veloci e consumano meno memoria. use v5.42; use feature 'keyword_all'; no warnings 'experimental::keyword_all'; my @numbers = … if ( all { $_ % 2 == 0 } @numbers ) { say 'Tutti i numeri sono pari'; }
- Per i campi definiti all'interno di una classe è stato implementato l'attributo «:writer», utilizzato per creare automaticamente un metodo che scrive il valore della variabile nel campo per l'istanza corrente della classe. class Point { field $x :reader :writer :param; field $y :reader :writer :param; } my $p = Point->new( x => 20, y => 40 ); $p->set_x(60);
- È stata aggiunta la supporto per la definizione di metodi lessicali, che, analogamente alla definizione di sottoprogrammi lessicali («lexical_subs»), consente di creare metodi disponibili solo nell'ambito di visibilità lessicale del blocco in cui sono stati creati. Per creare metodi di questo tipo si utilizza l'espressione «my nome_del_metodo».
- È stato aggiunto l'operatore «->&», che consente di chiamare sottoprogrammi che si trovano nell'ambito lessicale, come se fossero metodi. In combinazione con la possibilità di definire metodi lessicali, il nuovo operatore implementa una funzionalità simile a metodi privati.
- È stato aggiunto l'operatore di assegnazione «A ^^= B», che esegue l'operazione «A = A XOR B».
- È stata aggiunta la pragma «source::encoding», che definisce la codifica del codice sorgente. Per il codice in codifica ASCII si può indicare «use source::encoding 'ascii'» (impostazione predefinita), mentre per UTF-8 si utilizza «use source::encoding 'utf8'», con quest'ultima che è equivalente all'espressione «use utf8». L'interprete restituirà un errore se nel codice contrassegnato come ASCII sono presenti caratteri UTF-8, o se nel codice contrassegnato come UTF-8 si utilizzano sequenze di escape «\x{}». Per disabilitare il controllo di una parte del codice si può usare il valore «use no source::encoding». Nella pratica, la pragma aggiunta può risultare utile per identificare i casi in cui lo sviluppatore ha dimenticato di indicare «use utf8» per il codice in codifica UTF-8.
- È stata aggiunta la funzione chdir() nello spazio dei nomi «CORE::». Ad esempio, ora questa funzione può essere richiamata come «&CORE::chdir($dir)» oppure «my $ref = \&CORE::chdir; $ref->($dir)».
- È stata aggiunta l'espressione ‘no feature «apostrophe_as_package_separator»‘ per disabilitare il supporto dell'uso del simbolo » ‘ » come separatore dei nomi dei pacchetti (ad esempio, «My’Module’Var» invece di «My::Module::Var»). Inizialmente, in Perl 5.42 era prevista la rimozione del supporto per tali separatori, che erano stati dichiarati obsoleti, ma dopo discussioni si è deciso di mantenere questa possibilità di default, prevedendo però un'opzione per disabilitarla.
- Nel numero delle funzionalità restituite è stata inclusa la funzionalità «switch» e l'operatore «~~», che erano stati precedentemente contrassegnati come obsoleti e programmati per la rimozione. A partire dalle versioni Perl 5.36 e 5.42, le funzionalità «switch» e «~~» sono disabilitate per impostazione predefinita quando il codice è vincolato a versioni specifiche del linguaggio (ad esempio, specificando «use v5.42»), ma possono essere attivate con le espressioni ‘use feature «switch»‘ e ‘use feature «smartmatch»‘.
- È stato aggiunto il supporto per la specifica Unicode 16.0.
Fonte: opennet.ru
