Na een jaar ontwikkeling is een nieuwe stabiele versie van de programmeertaal Perl, 5.42, uitgebracht. Ter voorbereiding op de nieuwe release zijn ongeveer 280 regels code gewijzigd (zonder documentatie en automatisch gegenereerde code - 93). De wijzigingen hadden betrekking op 1500 bestanden en er waren 64 ontwikkelaars betrokken bij de ontwikkeling.
De 5.42-branch wordt uitgebracht volgens het twaalf jaar geleden vastgestelde vaste ontwikkelingsschema. Dit houdt in dat er jaarlijks nieuwe stabiele branches worden uitgebracht en elke drie maanden kleinere releases. Over ongeveer een maand staat de eerste kleine release van Perl 5.42.1 gepland, die de belangrijkste bugs zal verhelpen die tijdens de implementatie van Perl 5.42.0 zijn ontdekt. āāTegelijkertijd met de release van Perl 5.42 is de ondersteuning voor de 5.38-branch beĆ«indigd en updates hiervoor worden mogelijk in de toekomst alleen uitgebracht als er kritieke beveiligingsproblemen worden ontdekt. āāDe ontwikkeling van de experimentele 5.43-branch zal binnenkort van start gaan, op basis waarvan de stabiele release van Perl 2026 in juni 5.44 zal worden samengesteld, tenzij er wordt besloten over te stappen op de 7.x-nummering.
Belangrijkste wijzigingen:
- Experimentele operatoren voor lijstverwerking toegevoegd ā "any { BLOCK } @list" en "all { BLOCK } @list", die lijken op de operator "grep { BLOCK } @list", maar alleen true of false kunnen retourneren. De operator "all" retourneert "true" als de voorwaarde voor alle elementen van de lijst geldt, en de operator "any" retourneert "true" als de voorwaarde voor ten minste ƩƩn element geldt. De functionaliteit van de operatoren is vergelijkbaar met de functies uit de module List::Util, maar de ingebouwde varianten zijn sneller en verbruiken minder geheugen. gebruik v5.42; gebruik feature 'keyword_all'; geen waarschuwingen 'experimental::keyword_all'; my @numbers = ⦠if ( all { $_ % 2 == 0 } @numbers ) { zeg "Alle getallen zijn even"; }
- Voor velden die binnen een klasse zijn gedefinieerd, wordt het kenmerk ":writer" geĆÆmplementeerd. Dit kenmerk wordt gebruikt om automatisch een methode te maken die de waarde van een variabele naar een veld schrijft voor het huidige exemplaar van de klasse. class Point { field $x :reader :writer :param; field $y :reader :writer :param; } my $p = Point->new( x => 20, y => 40 ); $p->set_x(60);
- Ondersteuning toegevoegd voor het definiƫren van lexicale methoden. Dit stelt u, net als bij het definiƫren van lexicale subroutines ("lexical_subs"), in staat methoden te creƫren die alleen toegankelijk zijn binnen de lexicale scope van het blok waarin ze zijn gemaakt. Gebruik hiervoor de expressie "my method_name".
- De operator "->&" is toegevoegd, waardoor routines in lexicale scope kunnen worden aangeroepen alsof het methoden zijn. Gecombineerd met de mogelijkheid om lexicale methoden te definiƫren, biedt de nieuwe operator functionaliteit die vergelijkbaar is met private methoden.
- Toewijzingsoperator "A ^^= B" toegevoegd, die de bewerking "A = A XOR B" uitvoert.
- Pragma "source::encoding" toegevoegd om de codering van de broncode te definiĆ«ren. Voor ASCII-code kunt u "use source::encoding 'ascii'" (standaard) opgeven en voor UTF-8 kunt u "use source::encoding 'utf8ā²' opgeven, wat gelijk staat aan "use utf8". De interpreter genereert een foutmelding als UTF-8-tekens worden aangetroffen in code die is gemarkeerd als ASCII, of als "\x{}" escape-reeksen worden gebruikt in code die is gemarkeerd als UTF-8. U kunt "use no source::encoding" gebruiken om de controle op een deel van de code uit te schakelen. In de praktijk kan de toegevoegde pragma nuttig zijn om gevallen te detecteren waarin een ontwikkelaar is vergeten "use utf8" voor UTF-8-code op te geven.
- De functie chdir() is toegevoegd aan de naamruimte "CORE::". Deze functie is nu bijvoorbeeld toegankelijk als "&CORE::chdir($dir)" of "my $ref = \&CORE::chdir; $ref->($dir)".
- De instructie 'no feature "apostrophe_as_package_separator"' is toegevoegd om de ondersteuning voor het gebruik van het teken " ' " als scheidingsteken voor pakketnamen uit te schakelen (bijv. "Mijn'Module'Var" in plaats van "Mijn::Module::Var"). Perl 5.42 zou oorspronkelijk de ondersteuning voor dergelijke scheidingstekens, die inmiddels waren afgeschaft, verwijderen, maar na overleg is besloten deze functionaliteit standaard te behouden, maar een optie te bieden om deze uit te schakelen.
- De "switch"-functionaliteit en de "~~"-operator, die eerder waren verouderd en gepland voor verwijdering, zijn teruggeplaatst in de functies. Vanaf Perl 5.36 en 5.42 zijn de "switch"- en "~~"-functies standaard uitgeschakeld bij het koppelen van code aan taalversies (bijvoorbeeld door "use v5.42" op te geven), maar kunnen ze worden ingeschakeld met 'use feature "switch"' en 'use feature "smartmatch"'.
- Ondersteuning toegevoegd voor Unicode 16.0-specificatie.
Bron: opennet.ru
