Perl 5.30 gibt strengere Regeln vor

Das aktuelle Release konzentriert sich auf reguläre Ausdrücke und das Entfernen fehleranfälliger Vorgehensweisen.

In Pocket speichern vorlesen Druckansicht 25 Kommentare lesen
Perl 5.30 ist strenger
Lesezeit: 2 Min.
Von
  • Herbert Breunung

Früher als geplant haben die Perl Porter die ursprünglich für den 30. Mai vorgesehene Perl-Version 5.30 veröffentlicht. Sie enthält neben einigen kleinen Beschleunigungen und Fehlerbehebungen eine verbesserte Unterstützung von Unicode in regulären Ausdrücken und verbietet eine Reihe veralteter fehleranfälliger Ausdrücke.

Wie zu jeder neuen Version bringt das Release eine Auffrischung der Unicode-Verwendung – dieses Mal auf das diesen Monat erschienene Unicode 12.1. Zu einer vollen Unterstützung gehört dabei mehr als die Kenntnis der Zeichen und Grapheme. Das Konsortium zählt im Standard Funktionen auf, die reguläre Ausdrücke zu unterstützen haben, um Unicode-Zeichen auch inhaltlich zu verstehen.

Perl erfüllt mit kleineren Ausnahmen alle grundlegenden Funktionen ("Level 1 – Basic Unicode Support" und fügt die letzten fehlenden des erweiterten Standards hinzu. Dazu zählen die sogenannten Wildcard Properties, also Platzhalter für Eigenschaften von Unicode-Zeichen. Der regulärer Ausdruck

  qr! \p{nv= /(?x) \A [0-5] \z / }!

findet Ziffern von 0 bis 5, unabhängig davon, ob es arabische, sumerische oder klingonische sind. Der Ausbau dieser Funktionsweise soll mit Perl 5.32 abgeschlossen sein. Außerdem erkennt Perl nun benannte Codepoints (\N{...}) auch innerhalb einfach kommentierter regulärer Ausdrücke. Entwickler können neuerdings Teilausdrücke in einer positiven oder negativen Rückschau (lookbehind) in der Länge begrenzen. Folgende Regex akzeptiert nur ein "d", wenn vor ihm nicht zwei bis neun Mal "a" steht:

  /(?<!a{2,9})d/

Wer nach geschweiften Klammern sucht, sollte im regulären Ausdruck auf jeden Fall einen linksseitigen Schrägstrich voranstellen, um künftig Fehlermeldungen zu vermeiden. Die Perl-Entwickler haben zudem die Funktionen pack angepasst, damit sie kein fehlerhaftes Unicode zurückgibt.

Die Spezialvariablen $[, $* und $# stehen wie angekündigt ab Version 5.30 nicht mehr zur Verfügung. Benutzer von File::Glob::glob() müssen auf File::Glob::bsd_glob() ausweichen, und wer den Speicherinhalt mit dump ausgeben möchte, sollte von nun an CORE::dump verwenden. Abzuraten ist von der Deklaration lokaler Variablen innerhalb bedingter Ausdrücke, da die Existenz der Variable neuerdings von der Bedingung abhängt.

my $x if ...

Diese Vorgehensweise ist in Perl 5.30 nicht mehr erlaubt. Gleiches gilt für die Verwendung von sysread(), syswrite(), send() und recv() mit einem :utf8-Handle.

Weitere Details lassen sich der Ankündigung zu Perl 5.30 entnehmen. Eine Übersicht mit der vollständigen Liste der Änderung nebst aktualisierter Kernmodule ist ebenfalls verfügbar. (rme)