Programmiersprache Perl 5.38 führt Class-Feature ein

Mit der neuen Version von Perl beginnt der schrittweise Einzug des seit zwei Jahren angekündigten Objektsystems Corinna.

In Pocket speichern vorlesen Druckansicht 7 Kommentare lesen
Lesezeit: 3 Min.
Von
  • Herbert Breunung

Im Namen der Perl Porter hat Ricardo Signes Perl 5.38 freigegeben. Die Version bringt neben dem noch experimentellen Class-Feature drei neue Spezialvariablen sowie einige Verbesserungen im Bereich der Spezialblöcke (Phaser) und der regulären Ausdrücke.

Über allen Neuerungen thront die Einführung des seit zwei Jahren angekündigten Objektsystems (Projektname Corinna). Damit beginnen Klassen mit dem Schlüsselwort class und Methoden mit method. field definierte Attribute sowie deren Zugriffs- und Initialisierungsmethoden. Das ermöglicht erstmals in Perl 5 echte private Attribute, die dezentral mit dem Objekt gespeichert werden. Die Grundlage ist eine ebenfalls neu geschaffene interne Datenstruktur.

All dies und mehr aktiviert später die Anweisung use feature 'class';. Für 5.38 und mindestens 5.40 wird ein use experimental 'class'; nötig sein, da das Perl Steering Council im RFC-Prozess mehr Funktionen angenommen hat, als in 5.38 eingebaut werden konnten. Wie bei Perl üblich wird Corinna erst den experimentellen Status verlassen, wenn keine syntaktischen Änderungen mehr anstehen.

Eine umfangreiche Übersicht zu den implementierten und geplanten Fähigkeiten erscheint in Kürze in einem separaten Artikel auf heise Developer. Andere Neuerungen wie Signaturen lassen sich unabhängig vom Class-Feature aktivieren, und die alte Objektorientierung mit bless bleibt weiterhin bestehen.

Neben dem turnusmäßigen Update auf Unicode 15 gibt es jetzt die Umgebungsvariable $ENV{PERL_RAND_SEED}. Sie zu setzen entspricht einem Aufruf von srand mit dem Inhalt der Variable. Damit lässt sich beispielsweise Code testen, der den internen Zufallsgenerator verwendet.

Die Variable ${^LAST_SUCCESSFUL_PATTERN} enthält den letzten Fund eines beliebigen regulären Ausdruckes im aktuellen Geltungsbereich. Beispielsweise ersetzt

if (m/foo/ || m/bar/) {
     s/${^LAST_SUCCESSFUL_PATTERN}/PQR/;
}

entweder foo oder bar mit PQR, abhängig davon, was in $_ gefunden wurde. Bisher war das Vorgehen zwar implizit durch Auslassen der Spezialvariable möglich, war aber schlechter nachvollziehbar.

Wer der Variable %{^HOOK} CODE-Referenzen zuweist, kann das Verhalten von Perl bei Ereignissen wie dem Laden eines Moduls erweitern.

Das mit Version 5.36 der Programmiersprache eingeführte Pragma builtin bekommt im aktuellen Release die importierbaren Routinen is_tainted und export_lexically. Letztere stellt den Mechanismus zur Verfügung, den builtin selbst zum Exportieren von Symbolen verwendet. Im Gegensatz zum Standardmodul Exporter tauchen dabei nicht die (seltenen) Kompilierzeitprobleme auf.

Die alte Trennung für Paketnamen ', das Schlüsselwort switch und der Smart-Match-Operator ~~ gelten nun als deprecated (veraltet). Sie werden in Perl 5.42 nicht mehr vorhanden sein.

Weiteren Details, Geschwindigkeitsgewinne und Sicherheitsverbesserungen finden sich im perldelta.

Siehe auch:

  • Perl bei heise Download

(rme)