Nach einem Jahr der Entwicklung wurde die neue stabile Version der Programmiersprache Perl - 5.42 veröffentlicht. Bei der Vorbereitung der neuen Version wurden etwa 280.000 Zeilen Code geĂ€ndert (ohne Dokumentation und automatisch generierten Code - 93.000), wobei Ănderungen in 1.500 Dateien vorgenommen wurden und 64 Entwickler an der Entwicklung beteiligt waren.
Die Version 5.42 wurde gemÀà dem vor zwölf Jahren genehmigten festen Entwicklungszeitplan veröffentlicht, der die jĂ€hrliche Veröffentlichung neuer stabiler Versionen und alle drei Monate Korrekturausgaben vorsieht. In etwa einem Monat wird die erste Korrekturausgabe Perl 5.42.1 erscheinen, in der die bedeutendsten Fehler behoben werden, die wĂ€hrend der Implementierung von Perl 5.42.0 entdeckt wurden. Gleichzeitig mit der Veröffentlichung von Perl 5.42 wurde die UnterstĂŒtzung fĂŒr die Version 5.38 eingestellt, fĂŒr die Updates in Zukunft nur veröffentlicht werden, wenn kritische Sicherheitsprobleme auftreten. In naher Zukunft wird der Prozess zur Entwicklung der experimentellen Version 5.43 beginnen, auf dessen Grundlage im Juni 2026 eine stabile Version von Perl 5.44 erstellt wird, es sei denn, es wird beschlossen, zur Nummerierung 7.x ĂŒberzugehen.
Wichtige Ănderungen:
- Es wurden experimentelle Listenverarbeitungsoperatoren hinzugefĂŒgt: «any { BLOCK } @list» und «all { BLOCK } @list», die dem Operator «grep { BLOCK } @list» Ă€hneln, aber nur die Werte true oder false zurĂŒckgeben können. Der Operator «all» gibt «true» zurĂŒck, wenn die Bedingung fĂŒr alle Elemente der Liste erfĂŒllt ist, wĂ€hrend der Operator «any» «true» zurĂŒckgibt, wenn die Bedingung fĂŒr mindestens ein Element erfĂŒllt ist. Die FunktionalitĂ€t der Operatoren Ă€hnelt den Funktionen des Moduls List::Util, jedoch sind die eingebauten Varianten schneller und verbrauchen weniger Speicher. use v5.42; use feature 'keyword_all'; no warnings 'experimental::keyword_all'; my @numbers = ⊠if ( all { $_ % 2 == 0 } @numbers ) { say 'Alle Zahlen sind gerade'; }
- FĂŒr innerhalb der Klasse definierten Felder wurde das Attribut «:writer» implementiert, das zur automatischen Erstellung einer Methode verwendet wird, um den Wert einer Variablen in das Feld des aktuellen Klasseninstanz zu schreiben. class Point { field $x :reader :writer :param; field $y :reader :writer :param; } my $p = Point->new( x => 20, y => 40 ); $p->set_x(60);
- UnterstĂŒtzung fĂŒr die Definition von lexicalen Methoden hinzugefĂŒgt, die analog zur Definition von lexikalischen Unterprogrammen (âlexical_subsâ) es ermöglicht, Methoden zu erstellen, die nur im Geltungsbereich des Blocks sichtbar sind, in dem sie erstellt wurden. Zum Erstellen solcher Methoden wird der Ausdruck âmy name_of_methodâ verwendet.
- Der Operator â->&â wurde hinzugefĂŒgt, der es ermöglicht, Unterprogramme, die sich im lexikalischen Geltungsbereich befinden, so aufzurufen, als ob sie Methoden wĂ€ren. In Kombination mit der Möglichkeit, lexikale Methoden zu definieren, implementiert der neue Operator eine FunktionalitĂ€t, die privaten Methoden Ă€hnelt.
- Der Zuweisungsoperator âA ^^= Bâ wurde hinzugefĂŒgt, der die Operation âA = A XOR Bâ ausfĂŒhrt.
- Die Pragma "source::encoding" wurde hinzugefĂŒgt, um die Zeichencodierung des Quellcodes festzulegen. FĂŒr ASCII-codierten Code kann "use source::encoding 'ascii'" (standardmĂ€Ăig) angegeben werden, wĂ€hrend fĂŒr UTF-8 "use source::encoding 'utf8'" verwendet werden kann, wobei letzteres dem Ausdruck "use utf8" entspricht. Der Interpreter gibt einen Fehler aus, wenn im als ASCII gekennzeichneten Code UTF-8-Zeichen vorkommen oder wenn im als UTF-8 gekennzeichneten Code Escape-Sequenzen "\x{}" verwendet werden. Um die ĂberprĂŒfung eines Teils des Codes zu deaktivieren, kann der Wert "use no source::encoding" verwendet werden. Praktisch kann die hinzugefĂŒgte Pragma nĂŒtzlich sein, um FĂ€lle zu identifizieren, in denen der Entwickler vergessen hat, "use utf8" fĂŒr UTF-8-codierten Code anzugeben.
- Die Funktion chdir() wurde dem Namensraum "CORE::" hinzugefĂŒgt. Beispielsweise kann jetzt auf diese Funktion zugegriffen werden als «&CORE::chdir($dir)» oder «my $ref = \&CORE::chdir; $ref->($dir)».
- Eine neue Funktion âno feature «apostrophe_as_package_separator»â wurde hinzugefĂŒgt, um die UnterstĂŒtzung der Verwendung des Zeichens ââ als Paketnamen-Trenner zu deaktivieren (zum Beispiel âMyâModuleâVarâ anstelle von âMy::Module::Varâ). UrsprĂŒnglich war geplant, die UnterstĂŒtzung solcher Trenner in Perl 5.42 zu entfernen, die zuvor als veraltet deklariert wurden. In den Diskussionen wurde jedoch beschlossen, diese Möglichkeit standardmĂ€Ăig beizubehalten, jedoch eine Option zum Deaktivieren vorzusehen.
- Die FunktionalitĂ€t âswitchâ und der Operator â~~â, die zuvor als veraltet markiert und zur Entfernung geplant waren, wurden in die zurĂŒckgegebenen Möglichkeiten ĂŒbernommen. Ab den Perl-Versionen 5.36 und 5.42 sind die Möglichkeiten âswitchâ und â~~â standardmĂ€Ăig deaktiviert, wenn der Code an die Sprachversionen gebunden ist (zum Beispiel bei Verwendung von âuse v5.42â), können jedoch mit den AusdrĂŒcken âuse feature «switch»â und âuse feature «smartmatch»â aktiviert werden.
- UnterstĂŒtzung fĂŒr die Unicode-Spezifikation 16.0 wurde hinzugefĂŒgt.
Quelle: opennet.ru
