Perl 5.18: Ein kleiner, aber nachhaltiger Schritt

Die Entwickler haben sich gründlich mit bestehenden Problemen der Sprache auseinandergesetzt und unter anderem Warnungen beim Verwenden experimenteller Funktionen eingeführt. Weitere Neuerungen umfassen lexikalische Routinen und reguläre Ausdrücke.

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

Pünktlich im Mai verließ wieder ein neues Perl die Werkstatt der Perl Porter. Erwartete große Neuerungen wie Signaturen oder die zur YAPC::EU angekündigten minimalen Objekte a la Moose waren am 18. 5. für eine stabile Version noch nicht bereit, aber ein paar beachtenswerte Dinge gab es dennoch. Insgesamt fällt auf, dass wenige Probleme angegangen wurden, diese aber dafür eher gründlich und nachhaltig.

Zum Auslöser einer breiten Debatte wurde der mit 5.10 eingeführte Smartmatch-Operator (~~), dessen Verhalten sich mit 5.12, 5.14 und 5.16 änderte und wohl noch mindestens einmal ändern wird.
Um Ähnliches künftig zu vermeiden, geben ab jetzt experimentelle Funktionen Warnhinweise aus, die ausdrücklich unterdrückt werden müssen, wie etwa:

no warnings "experimental::feature_name"; 

Durch diesen Befehl soll der Programmierer zur Kenntnis nehmen, dass er sich nicht dauerhaft auf die verwendete Funktion verlassen kann. Das betrifft auch den smartmatch-Operator (und when) sowie mehrere ältere Features wie lexikalische Kontextvariablen (my $_). Eine vollständige Liste ruft perldoc perlexperiment auf.

Die beiden einzigen Neuerungen sind lexikalische Routinen und Set-Operationen innerhalb regulärer Ausdrücke. Beide sind als experimentell markiert.

no warnings "experimental::lexical_subs"; 
use feature 'lexical_subs';

So angemeldet dürfen "Subs" wie Variablen als my, state oder our deklariert werden und sind dann nur im entsprechenden Bereich sichtbar. Der Befehl

no warnings "experimental::regex_sets"; 

ermöglicht, widerspruchslos eigene Zeichenklassen mithilfe von Vereinigung, Schnittmengen und anderer Set-Operationen zu erzeugen. Änderungen, die laufende Programme ins Stolpern bringen könnten, sind:

  • Regex und folgende alphanumerische Operatoren sind durch Leerzeichen zu trennen.
  • Vertikale Tabs (\cK) gehören nun der Klasse der Leerzeichen an ([:space:], \s) und werden auch unter m/.../x ignoriert.
  • \N{BELL} bezeichnet jetzt den Unicode-Codepoint U+1F514 statt dem historischen U+0007 (\b).
  • qw umgebende Klammern wie in for (qw(a b c)) {...} dürfen nicht mehr weggelassen werden.
  • Befehle wie given und Kernmodule verwenden wieder local $_ statt my $_.

Eine weitere Überarbeitung erfuhr die Ausgabereihenfolge von Hashwerten: Sie bleibt wie gewohnt zwischen Lesezugriffen erhalten, ändert sich nun allerdings beim Neustart des Programms oder beim Befüllen eines anderen Hashes mit den selben Werten. Dadurch soll sich der Hash-Seed vor DOS-Angreifern verschleiern lassen. Neue Funktionen und Spezialvariablen erlauben es zudem, ihn direkt zu beeinflussen. Dabei wurde auch der Umstand behoben, dass äußerst seltene Konstellationen von Hash-Schlüsseln Perl dazu veranlassen, unrealistisch viel Speicher zu allokieren. Ein ähnliches Problem, welches vor über einem Jahr in die Schlagzeilen geriet, ließ sich in Perl bereits 2003 mit Version 5.8.1 beheben.

Darüber hinaus nutzt Perl 5.18 nun Unicode 6.2 und die Entwickler raten von der Benutzung des Pragmas encoding ab. Die Liste der unterstützten Betriebssysteme enthält nicht länger BeOS (nicht Haiku), UTS Global, VM/ESA , MPE/IX, EPOC und Rhapsody. DG/UX und NeXT könnten ihnen demnächst folgen. Alle Änderungen lassen sich im perldelta nachlesen. (jul)