Programmiersprache Perl 5.36 liefert Bausteine für den Umstieg auf Version 7

Neue Hilfsfunktionen bringen unter anderem eine Annäherung an einen booleschen Datentyp, und Builtins ersparen die Suche nach Funktionen in Modulen.

Lesezeit: 4 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 2 Beiträge

(Bild: Shutterstock)

Von
  • Herbert Breunung

Ricardo Signes, der die Perl 5 Porter (p5p) bereits von 2011 bis 2016 leitete, verkündete am 28. Mai 2022 das Erscheinen der jährlichen, stabilen Version. Unabhängig von den großen Ankündigungen von Perl 7 und dem neuen Objektsystem Corinna legt Perl 5.36 weitere Grundlagen für eine Zukunft von Perl, die möglichst nicht mit der Vergangenheit und alten Stärken bricht, aber dennoch moderne Annehmlichkeiten bietet.

Die auffälligste dieser Grundlagen ist ein Mechanismus, der Perl mit teilweise neuen Hilfsfunktionen erweitert, ohne den Namensraum der Subroutinen unplanmäßig zu belasten. Das erspart Anfängern die Suche nach Modulen wie etwa Scalar::Util oder POSIX, deren Existenz erst entdeckt werden will.

Etwa auf die Funktion trim, die lästige Leerzeichen am Anfang und Ende einer Zeichenkette (String) entfernt, lässt sich per builtin::trim( $string ) zugreifen. Wer das builtin:: weglassen mag, muss vorher die Funktion per

use builtin 'trim';

in den Namensraum des aktuellen Moduls oder Blocks importieren. Perspektivisch am interessantesten sind die drei unscheinbaren Hilfsfunktionen true, false und is_bool(), die einen booleschen Datentyp simulieren, ohne lieb gewonnene Freiheiten aufzugeben. Dass in Variablen abgelegte, "echte" Bool-Werte sich dauerhaft von einer regulären 0 oder 1 unterscheiden lassen, ist ebenfalls eine Neuerung von Version 5.36. Zusammen betrachtet mit den neuen Signaturen, deren Mächtigkeit wachsen soll, und einem Corinna, das Schlüsselworte wie class und method einführt, lässt sich erahnen, wie Perl 7 aussehen könnte.

Das Pragma builtin ist frisch ausgeliefert und daher experimentell, was ebenso für experimental::for_list gilt, der Verwendung von mehr als einer Laufvariable in for-Schleifen. Im folgenden Beispiel landet der erste, dritte, fünfte Wert, und so weiter, aus @unzip in $left.

for my ($left, $right) (@unzip) { ... }
for my ($key, $value) (%hash) { ... }

Die Iteration über Schlüssel-Wert-Paare eines Hash ist etwas handlicher und weniger Sonderfall als im bisherigen

while (my ($key, $value) = each %hash) {...}

Etwas Vergleichbares lässt sich nun auch mit Arrays erreichen, wenn man auf das Builtin indexed zurückgreift:

for my ($index, $val) (indexed @array) { ... }

Die Warnung "experimentell" zeigt auch an, dass die Syntax sich ändern kann. Im Fall des mit Version 5.34 eingeführten try {...} catch {...} bedeutet es: Nun lassen sich finally {...}-Blöcke anfügen, wie man es etwa aus Java kennt. Analog dazu gibt es neuerdings defer {}-Blöcke. Sie werden bei jedem Verlassen des umschließenden Blockes ausgeführt und sind daher nicht mit END {...} zu verwechseln, das nur einmalig zum Laufzeitende ausgeführt wird.

Dass Perl 5.36 Unicode 14.0 unterstützt, ist schön, aber vorhersehbare Tradition, ebenso dass die vor zwei Versionen eingeführten Experimente nun stabil sind. Dazu zählen die angesprochenen Signaturen, Mengenoperationen auf Zeichenklassen in regulären Ausdrücken und das Longest Token Matching (LTM) in vorausschauenden Regex-Ausdrücken.

Alle drei aufgezählten Features lassen sich mit use v5.36; aktivieren, zusätzlich zu den bereits mit use v5.34; integrierten. Hinzu kommt das altbekannte Pragma warnings, das use v5.36; ebenfalls enthält. Der gleiche Befehl deaktiviert jedoch den indirekten Methodenaufruf ($x = new Class;) und das weitgehend vergessene multidimensional, das Perl 4 einst half, verschachtelte Hashes zu simulieren, indem es $h{'a', 'b'} auf $h{join $;,'a','b'} abbildet.

Sollte die als nächstes planmäßig anstehende Version 5.38 als Perl 7 erscheinen, werden lediglich die Seiten gewechselt und ein use v5.38; ist impliziert. Ungewolltes müssen Entwicklerinnen und Entwickler in dem Fall explizit deaktivieren, beispielsweise no warnings;. Gewollte, nicht mehr integrierte Features müssen sie explizit aktivieren, beispielsweise use feature "multidimensional".

Eine vollständige Übersicht aller Änderungen findet sich in den Release Notes.

(rme)