De programmeertaal Perl 5.42 is beschikbaar.

Na een jaar ontwikkeling is de nieuwe stabiele versie van de programmeertaal Perl - 5.42 - uitgebracht. Bij het voorbereiden van deze nieuwe versie zijn er ongeveer 280.000 regels code gewijzigd (exclusief documentatie en automatisch gegenereerde code - 93.000). De wijzigingen hebben 1500 bestanden aangetast en 64 ontwikkelaars hebben aan de ontwikkeling deelgenomen.

De versie 5.42 is uitgebracht volgens het vastgestelde schema dat twaalf jaar geleden is goedgekeurd. Dit schema voorziet in de release van nieuwe stabiele versies eens per jaar en correctieve versies elke drie maanden. Ongeveer een maand later wordt de eerste correctieve versie Perl 5.42.1 verwacht, waarin de belangrijkste fouten die tijdens de implementatie van Perl 5.42.0 zijn ontdekt, worden verholpen. Gelijktijdig met de release van Perl 5.42 is de ondersteuning voor versie 5.38 gestopt. Voor deze versie kunnen in de toekomst alleen updates worden uitgebracht als kritische beveiligingsproblemen worden ontdekt. Binnenkort begint het proces van ontwikkeling van de experimentele versie 5.43, waarop in juni 2026 een stabiele release van Perl 5.44 zal worden gevormd, tenzij besloten wordt om over te stappen naar nummering 7.x.

Belangrijkste wijzigingen:

  • Er zijn experimentele lijstverwerkingsoperatoren toegevoegd - «any { BLOCK } @list» en «all { BLOCK } @list», die lijken op de operator «grep { BLOCK } @list», maar alleen waarheidswaarden (true of false) kunnen retourneren. De operator «all» retourneert «true» als aan de voorwaarde voor alle elementen in de lijst wordt voldaan, terwijl de operator «any» dit doet als aan de voorwaarde voor ten minste één element wordt voldaan. 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. use v5.42; use feature ‘keyword_all’; no warnings ‘experimental::keyword_all’; my @numbers = … if ( all { $_ % 2 == 0 } @numbers ) { say «Alle nummers zijn even»; }
  • Voor velden gedefinieerd binnen een klasse is het attribuut «:writer» geïmplementeerd, dat wordt toegepast voor het automatisch aanmaken van een methode die de waarde van een variabele in het veld voor het huidige exemplaar van de klasse opslaat. 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 voor het definiëren van lexicale methoden is toegevoegd, waarmee, analogisch aan het definiëren van lexicale subprogrammas ('lexical_subs'), methoden kunnen worden gemaakt die alleen binnen de lexicale zichtbaarheid van het blok waarin ze zijn gemaakt beschikbaar zijn. Om dergelijke methoden te maken, wordt de uitdrukking 'my naam_methode' gebruikt.
  • De operator '->&', waarmee subprogrammas die binnen de lexicale zichtbaarheid zich bevinden, kunnen worden aangeroepen alsof ze methoden zijn, is toegevoegd. In combinatie met de mogelijkheid om lexicale methoden te definiëren, implementeert de nieuwe operator functionaliteit die lijkt op privé-methoden.
  • De toewijzingsoperator 'A ^^= B', die de operatie 'A = A XOR B' uitvoert, is toegevoegd.
  • De pragma 'source::encoding' is toegevoegd, die de codering van de broncode definieert. Voor code in ASCII-codering kan 'use source::encoding 'ascii'' worden opgegeven (standaard), en voor UTF-8 kan 'use source::encoding 'utf8'' worden gebruikt, waarbij de laatste uitdrukking gelijkwaardig is aan 'use utf8'. De interpreter geeft een foutmelding als in code die als ASCII is gemarkeerd, UTF-8-symbolen voorkomen, of als in code die als UTF-8 is gemarkeerd, escape-sequenties '\x{}' worden gebruikt. Om de controle voor een deel van de code uit te schakelen, kan de waarde 'use no source::encoding' worden gebruikt. In de praktijk kan de toegevoegde pragma nuttig zijn voor het identificeren van gevallen waarin een ontwikkelaar vergeten is 'use utf8' op te geven voor code in UTF-8-codering.
  • De functie chdir() is toegevoegd aan de naamruimte 'CORE::'. Bijvoorbeeld, deze functie kan nu worden aangeroepen als '&CORE::chdir($dir)' of 'my $ref = \&CORE::chdir; $ref->($dir)'.
  • De uitdrukking 'no feature "apostrophe_as_package_separator"' is toegevoegd om de ondersteuning voor het gebruik van het teken ' ' als scheidingsteken voor pakketnamen uit te schakelen (bijvoorbeeld 'My'Module'Var' in plaats van 'My::Module::Var'). Aanvankelijk was het de bedoeling om de ondersteuning voor dergelijke scheidingstekens in Perl 5.42 te verwijderen, wat eerder als verouderd werd beschouwd, maar tijdens besprekingen werd besloten deze mogelijkheid standaard te behouden, maar met een optie om deze uit te schakelen.
  • De functionaliteit 'switch' en de operator '~~' zijn nu teruggebracht in de lijst met aangeboden mogelijkheden. Deze waren eerder gemarkeerd als verouderd en stonden gepland om verwijderd te worden. Vanaf de versies Perl 5.36 en 5.42 zijn de functies 'switch' en '~~' standaard uitgeschakeld bij het koppelen van code aan taalkversies (bijvoorbeeld bij het specificeren van 'use v5.42'), maar kunnen ze worden geactiveerd met de uitdrukkingen 'use feature "switch"' en 'use feature "smartmatch"'.
  • Ondersteuning voor Unicode specificatie 16.0 is toegevoegd.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster