Entwicklung & Code
Programmiersprache Perl 5.42 führt neue Listenoperatoren ein
Die schrittweise Einführung des parallelen Objektsystems Corinna setzt auch das neue Release Perl 5.42 fort. Neben der Bereinigung zahlreicher – auch sicherheitsrelevanter – Fehler liefert das Update der Programmiersprache sowohl verschiedene Erweiterungen als auch neue Funktionen. So lassen sich autogenerierte, kombinierte getter-setter-Methoden nun über die Eigenschaft :writer(...)
der field
-Variablen einrichten. Perl 5.42 behebt außerdem den gegenüber vergleichbaren Sprachen langjährigen Nachteil, keine vollständige Kapselung bieten zu können.
Weitere Schritte auf dem Weg zum Objektsystem
Mit dem experimentellen Feature class
begann vor rund zwei Jahren der Übergang zum Objektsystem Corinna. Die komplette Funktionalität von Corinna fasst das Perl-Entwicklungsteam als feature
class
zusammen. Nach den offiziellen Regeln wird es noch etliche Jahre im Status experimentell bleiben, da dieser erst mindestens zwei Jahre nach der letzten Änderung fallen darf. Da zudem noch Neuerungen wie roles
und gegebenenfalls ein Metaobjekt-System in Planung sind, wird das Feature class
frühestens 2028 als nicht mehr experimentell eingestuft werden können.
Entwicklerinnen und Entwickler, die unter Perl 5.42 ihre Programme mit use experimental ‚class‘; beginnen, dürfen field
-Variablen mit der Eigenschaft :writer(...)
kennzeichnen und somit den Namen einer autogenerierten setter-Methode festlegen, die den öffentlichen Zugriff auf das ansonsten private Objekt-Attribut erlaubt. Das ist auch der einzige Weg autogenerierte, kombinierte getter-setter-Methoden zu bekommen, da der Name der Zugriffsmethode im Regelfall aus dem Präfix set_
und dem Attributnamen besteht.
Darüber hinaus können mit method
deklarierte Methoden jetzt auch einen lexikalisch lokalen Zugriffsbereich besitzen, der – wie bei Variablen – ein my
erzwingt. Der Zugriff auf die Methode erfolgt innerhalb der Klasse mit $objekt->&methode(...)
, unter Umgehung der Vererbungshierarchie. Damit besitzt Perl nun eine vollständige Kapselung und behebt einen wesentlichen Nachteil, den es lange Jahre gegenüber vergleichbaren Sprachen besaß.
Neu sind ebenfalls zwei Listenoperatoren im Stile von map
und grep
. any
liefert ein true
, wenn die in geschweiften Klammern mitgelieferte Bedingung für einen Listenwert zu true
evaluiert – bei all
müssen es dem Operatornamen entsprechend alle sein. Beide Operatoren brechen die Berechnung ab, sobald das Ergebnis feststeht, und sie müssen derzeit noch mit use experimental 'keyword_any';
, beziehungsweise use experimental 'keyword_all';
angemeldet werden.
Gleiches gilt für die älteren Features switch
und smartmatch
, die entgegen anderslautenden Ankündigungen nicht entfernt werden. Der Vollständigkeit wegen wurde auch der selbstzuweisende xor-Operator mit hoher Präzedenz: =^^
nachgereicht und mit use source::encoding 'utf8';
hat das Entwicklungsteam einen expliziten Alias für use utf8;
gefunden. no feature "apostrophe_as_package_separator";
dient lediglich dazu sicherzustellen, dass unbekannter Code nicht den veralteten Paketnamentrenner verwendet.
Langjährige Schwachstellen behoben
Die beiden wichtigsten behobenen Fehler mit Sicherheitsrelevanz sind erstens in CVE-2024-56406 beschrieben. Demnach konnten Ersetzungen von Zeichen, die mit mehreren Bytes kodiert sind, zu Pufferüberläufen führen. Zweitens ließ sich laut CVE-2025-40909 während des Forks eines Thread Schadcode ausführen. Die Schwachstellen waren vier beziehungsweise vierzehn Jahre offen.
Eine komplette Übersicht aller in Perl 5.42 behobenen Fehler, Dokumentationsänderungen, Fehlermeldungen sowie weiterer Interna lässt sich in perldoc einsehen.
Siehe auch:
(map)