Efter et års udvikling er den nye stabile gren af programmeringssproget Perl — 5.42 blevet offentliggjort. I forberedelsen af den nye udgave er omkring 280.000 linjer kode ændret (uden dokumentation og automatisk genereret kode — 93.000), og ændringerne påvirkede 1.500 filer, mens 64 udviklere har deltaget i udviklingen.
Grenen 5.42 blev udgivet i henhold til den fastlagte udviklingsplan, der blev godkendt for tolv år siden, hvor det indebærer udgivelse af nye stabile grene en gang om året og korrektive udgivelser hver tredje måned. Omkring en måned senere planlægges den første korrektive udgivelse af Perl 5.42.1, hvor de mest betydningsfulde fejl, der er opdaget i forbindelse med implementeringen af Perl 5.42.0, vil blive rettet. Samtidig med udgivelsen af Perl 5.42 ophører støtten til grenen 5.38, for hvilken opdateringer i fremtiden kun kan udgives, hvis kritiske sikkerhedsproblemer opdages. Snart vil udviklingsprocessen for den eksperimentelle gren 5.43 begynde, hvoraf en stabil udgivelse af Perl 5.44 vil blive dannet i juni 2026, medmindre der træffes beslutning om at gå over til nummereringen 7.x.
Nøgleændringer:
- Eksperimentelle listebehandlingsoperatorer er tilføjet — «any { BLOCK } @list» og «all { BLOCK } @list», som minder om operatoren «grep { BLOCK } @list», men kun kan returnere værdierne true eller false. Operatoren «all» returnerer «true» hvis betingelsen er opfyldt for alle elementer i listen, mens operatoren «any» gør det for mindst ét element. Funktionaliteten af operatorerne svarer til funktionerne fra modulet List::Util, men de indbyggede varianter er hurtigere og bruger mindre hukommelse. use v5.42; use feature ‘keyword_all’; no warnings ‘experimental::keyword_all’; my @numbers = … if ( all { $_ % 2 == 0 } @numbers ) { say «Alle tallene er lige»; }
- For felter defineret inden for klassen er attributten «:writer» implementeret, som anvendes til automatisk at oprette en metode, der skriver værdien af variablen til feltet for den aktuelle instans af klassen. class Point { field $x :reader :writer :param; field $y :reader :writer :param; } my $p = Point->new( x => 20, y => 40 ); $p->set_x(60);
- Der er tilføjet støtte til definition af leksiske metoder, som i analogi med definitionen af leksiske underprogrammer («lexical_subs»), gør det muligt at oprette metoder, der kun er tilgængelige inden for det leksiske omfang af den blok, hvor de blev oprettet. For at oprette sådanne metoder anvendes udtrykket «my navn_på_metode».
- Der er tilføjet operatøren «->&», som gør det muligt at kalde underprogrammer, der er inden for det leksiske omfang, som om de var metoder. I kombination med muligheden for at definere leksiske metoder implementerer den nye operatør funktionalitet, der ligner private metoder.
- Der er tilføjet tildelingsoperatoren «A ^^= B», der udfører operationen «A = A XOR B».
- Der er tilføjet pragman «source::encoding», der definerer kodningen af kildekoden. For kode i ASCII-kodning kan man angive «use source::encoding 'ascii'» (standard), og for UTF-8 — «use source::encoding 'utf8'», hvor det sidste udtryk er ækvivalent med udtrykket «use utf8». Fortolkeren vil give en fejl, hvis der i kode, der er markeret som ASCII, dukker UTF-8-tegn op, eller hvis der i kode, der er markeret som UTF-8, anvendes escape-sekvenser «\x{}». For at deaktivere kontrollen af dele af koden kan man bruge værdien «use no source::encoding». I praksis kan den tilføjede pragman vise sig nyttig til at identificere situationer, hvor udvikleren glemte at angive «use utf8» for kode i UTF-8-kodning.
- Til navnerummet «CORE::» er der tilføjet funktionen chdir(). For eksempel kan denne funktion nu kaldes som «&CORE::chdir($dir)» eller «my $ref = \&CORE::chdir; $ref->($dir)».
- Der er tilføjet udtrykket ‘no feature «apostrophe_as_package_separator»‘ for at deaktivere understøttelsen af at bruge symbolet » ‘ » som pakkeadskillelsestegn (f.eks. «My’Module’Var» i stedet for «My::Module::Var»). Oprindeligt var det planlagt i Perl 5.42 at fjerne støtte for sådanne adskillelser, som tidligere var blevet erklæret forældede, men under diskussionerne besluttede man at bevare denne mulighed som standard, men med en mulighed for at deaktivere den.
- Funktionen 'switch' og operatoren '~~', der tidligere var markeret som forældede og planlagt til fjernelse, er nu inkluderet i de returnerede funktioner. Fra Perl-versionerne 5.36 og 5.42 er 'switch' og '~~' som standard deaktiveret, når koden bindes til sprogversioner (for eksempel ved at angive 'use v5.42'), men kan aktiveres med 'use feature "switch"' og 'use feature "smartmatch"'.
- Understøttelse af Unicode-specifikation 16.0 er blevet tilføjet.
Kilde: opennet.ru
