Skriptsprache: Perl 5.26 ist sicherer und hat schönere reguläre Ausdrücke

Es ist Mai – das bedeutet auch, es ist Zeit für eine neue Version der Skriptsprache Perl. In das aktuelle Release sind auch Features geflossen, die schon im parallel entwickelten Perl 6 zu finden sind.

 –  0 Kommentare
Skriptsprache: Perl 5.26 ist sicherer und hat schönere reguläre Ausdrücke

Etwas sicherer ist sie und sie hat schönere reguläre Ausdrücke: So lautet das Kurzfazit der neuen Perl-5-Version, die wieder zwei Dutzend kleinere und größere Detailverbesserungen bringt und die großen Visionen Perl 6 überlässt. Die offizielle Ankündigung steht derzeit allerdings noch aus.

Dabei haben sich die Perl-Porter – also die Gruppe der Perl-Entwickler – den einen oder anderen Kniff von Perl 6 abgeschaut, so wie zu jeder 5.10+-Version. Doch auch wenn die Leitung im vorigen Jahr an SawyerX überging, hat sich nichts an der Politik geändert, dass die unmittelbaren Schwierigkeiten der Perl-5-Nutzer Vorrang haben. Zu denen gehörte die Sicherheitslücke CVE-2016-1238, die es Dieben ermöglicht, Perl-Programme mit vorzugsweise weitreichenden Privilegien zu kapern, sofern sie bereits das Schreibrecht zu deren Arbeitsverzeichnis besitzen. Das Schlupfloch ist seit Langem optional schließbar und leider auch eine von kritischen Skripten verwendete Funktion, weshalb lediglich schärfere Regeln dafür eingeführt wurden, wann es geöffnet wird.

Skriptautoren müssen ab Perl 5.26 push @INC, '.'; in ihre Skripte einfügen, damit sie weiterhin lokal bereitstehende Module laden können. Eine neue Fehlermeldung macht die Programmierer darauf aufmerksam, dass sie das vielleicht vergessen haben.

Neben dem Einfügen des Unicode-9-Standards gab es wieder die üblichen, winzigen Anpassungen, um Altlasten abzubauen, Regeln zu vereinfachen und um zukünftigen Konflikten vorzubeugen. Zum Beispiel ist ein use ::Paketname; nicht mehr erlaubt. Auch muss ab jetzt in regulären Ausdrücken einer geschweiften Klammer immer der rückwärtige Schrägstrich vorangestellt werden (/\{\}/), falls sie als Literal aufgefasst werden soll, so wie bei anderen Symbolen mit Sonderbedeutung auch. Den Regex-Modifikator x, der es gestattet, mit Leerzeichen zu formatieren, ohne die Bedeutung zu verändern, erweitert der Modifikator xx, der zusätzlich das Gleiche innerhalb von Zeichenklassen zulässt. Die eingeführte Spezialvariable %{^CAPTURE} fasst die positionalen ($1..) und die benannten Captures (%+) zusammen und ähnelt damit etwas dem Capture-Objekt aus Perl 6.

Wem schon lange missfallen hat, dass Heredoc-Strings die kostbare Code-Formatierung stören, der kann sie ab Perl 5.26 mit <~EOF (mit Tilde) einleiten und nach den gleichen Regeln einrücken wie in Perl 6 auch. Ebenfalls bekannt aus Perl 6 sind lexikalische Subroutinen (my sub ...), die als experimentelles Feature lexical_subs in Perl 5.18 Einzug hielten. Dieser Status wurde aufgehoben, weswegen sie nun ohne Warnungen mit: use feature 'lexical_subs'; oder use v5.26; zuschaltbar sind.

Zwischen den gängigen Überarbeitungen und Erweiterungen der Dokumentation fällt besonders das neu geschaffene Dokument "perldeprecation" auf, das die Planung der Perl-Porter bis Version 5.32 wiedergibt, ab wann welche Funktion nicht mehr empfohlen und wann sie endgültig abgeschafft wird.

Siehe dazu auf heise Developer: