Perl 6 ist da!

Eine gefühlte Ewigkeit ist es her, dass die Idee von Perl 6 geboren wurde. Zwischenzeitlich schon mit Duke Nukem Forever in einem Atemzug genannt, jetzt aber endlich da: Perl 6!
Wobei Perl 6 eine Spezifikation einer Programmiersprache ist und nicht die Implementierung an sich. Gestern wurde Rakudo Star veröffentlicht, das Perl 6 auf Parrot. Damit gibt es erstmals eine benutzbare Implementierung von Perl 6. Rakudo Star ist aber noch langsam, es ist auch nicht für den Produktivbetrieb gedacht und es fehlt auch noch die Modulvielfalt von Perl 5, aber dank Rakudo gibt es jetzt eine Version, auf der man Modulentwicklungen aufbauen kann.
Ich möchte hier keine weit ausschweifende Einführung in Perl 6 geben – denn dafür gibt es das Buch mit Rakudo und ein Tutorial in den $foo Ausgaben 4 bis 11-, sondern einfach ein paar kleinere Codebeispiele zeigen und Lust auf mehr machen.
Perl 6 ist nicht einfach eine Weiterentwicklung von Perl 5, sondern eine eigenständige Sprache in der Perl-Familie mit vielen netten Features. Für Programmierer, die Perl 5 kennen, dürfte aber einiges bekannt vorkommen (Änderungen gegenüber Perl 5 sind auch unter http://wiki.perl-community.de/Wissensbasis/Perl6TafelAnhangD zu finden). So gibt es auch weiterhin die bekannten Datentypen „Skalar“, „Array“ und „Hash“.
Schauen wir uns doch mal ein ganz einfaches Perl 6 Programm an – aber kein typisches „Hello, World“-Programm:

use v6;
say "Ein Anfang in Perl 6";
my $name = prompt "Wie lautet Ihr Name?";
"$name, willkommen bei Perl 6".say;

Das „use v6;“ wird hier verwendet, damit man keine verwirrenden Fehlermeldungen bekommt, falls man das Programm mal mit Perl 5 laufen lässt, sondern man gesagt bekommt, dass es für Perl 6 gedacht ist.
„say“ gibt etwas aus und hängt automatisch einen Zeilenumbruch an. Mit „prompt“ kann man eine Eingabeaufforderung machen und die letzte Zeile soll zeigen, dass (fast) alles ein Objekt ist – auch einfache Strings. Das dürfte den Python-Programmierern bekannt vorkommen. Im Gegensatz zu Perl 5 wird der Methodenaufruf mit einem „.“ statt einem „->“ vom Objekt getrennt.
Arbeiten mit Dateien noch einfacher
Schon in Perl 5 ist es sehr einfach, mit Dateien zu arbeiten, aber mit Perl 6 wird das Ganze noch einfacher. Ein paar dieser Sachen sind Programmierern aus anderen Sprachen schon bekannt, aber Perl ist ja auch dafür bekannt, dass es Nützliches aus anderen Sprachen übernimmt.
So kann mit einer einzigen Zeile der komplette Inhalt einer Datei in eine Variable eingelesen werden:

use v6;
my $content = slurp 'datei.txt';
my @lines   = lines 'datei.txt';

Wer mehr Kontrolle braucht kann auch weiterhin mit „open“ arbeiten.
Unendliche Listen

In Perl 6 gibt es aber auch einige sehr interessante Sachen: So ist es möglich, eine Schleife bis Unendlich laufen zu lassen und Perl 6 kann auf Grund der ersten Element einer List auf die folgenden Elemente schließen.

use v6;
for 1,2,4 ... * -> $i {
say $i;
last if $i > 16;
}

Damit geht Perl 6 davon aus, dass immer die „mal 2“ genommen werden soll. Es gibt also die Zahlen 1, 2, 4, 8 und 16 aus. Eine sehr praktische Art, Reihen zu erstellen. Das „*“ am Ende der Reihe bedeutet „unendlich“. Deswegen muss innerhalb der Schleife auch eine Abbruchbedingung angegeben werden, sonst würde das eine Endlosschleife sein.
Viele neue Operatoren
Perl 6 hat jede Menge neue Operatoren, die jede Menge Spaß bringen. So gibt es eine „Zip“-Operator, der wie ein Reißverschluss zwei Arrays ineinanderfügt.

use v6;
my @books     = "Mastering Perl", "Perl Testing", "XML and Perl";
my @authors   = "brian d foy", "chromatic", "Riehl/Sterin";
my @publisher = "O'Reilly", "O'Reilly", "New Riders";
for @books Z @authors -> $book, $author {
say $book, ' -> ', $author;
}
for @books Z @publisher -> $book, $publisher {
say $book, ' -> ', $publisher;
}

Ein weiteres tolles Beispiel ist die Berechnung der Summe aller Elemente eines Arrays. Man kann entweder über die Elemente iterieren und dann die Werte der Elemente zu einer Variablen addieren oder man benutzt in Perl 6 einen neuen Operator:

use v6;
my @sales_numbers = 1_200_000, 10_000, 555, 3_483;
my $sales_sum     = [+] @sales_numbers;
say "Total of sold books:", $sales_sum;

Natürlich könnte man hier auch jede andere Operation mit den Array-Elementen machen.
Man könnte jetzt noch so viel über Perl 6 erzählen, aber das würde diesen Artikel sprengen. Das waren auch nur ein paar kleine Features und die großen Neuerungen in Bezug auf Objektorientierung und Reguläre Ausdrücke/Grammars wurden hier außen vor gelassen.
Es lohnt sich aber, einen Blick auf Perl 6 (bzw. Rakudo Star) zu werfen und damit herumzuspielen. Es macht wirklich Spaß!
Durch Perl 6 wird die Perl 5 Entwicklung aber nicht eingestellt. Die Entwicklung an zukünftigen Perl 5 Versionen wird genauso fleißig weitergehen wie bisher – mit einem monatlichen Entwicklerrelease und einem jährlichen stabilen Release.
Über den Autor: Renée Bäcker ist seit 2002 begeisterter Perl-Programmierer und seit 2003 selbständig. Auf der Suche nach einem Perl-Magazin ist er nicht fündig geworden und hat selbst das Perl-Magazin „$foo“ gestartet. In der Perl-Community ist Renée recht aktiv – als Moderator bei Perl-Community.de, Organisator des kleinen Frankfurt Perl-Community Workshop und Mitglied im Events-Team der Perl Foundation.


Fügen Sie einen Kommentar hinzu

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.