Dieser Artikel beschäftigt sich mit der Skriptsprache Perl. Weitere Bedeutungen des Worts finden Sie unter Perl (Begriffserklärung).
Perl (Practical Extraction and Report Language) ist eine populäre Skriptsprache für die Erstellung von Computerprogrammen, obwohl die damit geschriebenen Programme der Unübersichtlichkeit wegen manchmal scherzhaft als WOPs, write-only programs, bezeichnet werden.
Sie wurde ursprünglich von Larry Wall entworfen, der diese Sprache jedoch 1993 der Allgemeinheit unter den Bedingungen der Artistic-Lizenz frei zur Verfügung stellte (Artistic Licence). Er bestimmt auch heute noch maßgeblich die Entwicklung. Die erste Version wurde 1987 publiziert. Perl umfasst die Eigenschaften vieler anderer Programmiersprachen. Dies hat den Vorteil, dass sich viele Programmierer rasch eingearbeitet haben, hat aber auch den Nachteil, dass der entstehende Code oft schlecht lesbar ist.
Die Sprache ist in erster Linie auf die Verarbeitung von Texten und Textdateien ausgelegt, sowie zur Ausgabe von Berichten. Durch zahlreiche Erweiterungen und zusätzliche Bibliotheken hat sich Perl inzwischen jedoch zu einer universell einsetzbaren Sprache weiterentwickelt, die beispielsweise häufig von Systemadministratoren und Webentwicklern (siehe CGI) eingesetzt wird. Perl wurde für den praktischen Einsatz entwickelt und konzentriert sich daher auf einfache Programmierbarkeit, Vollständigkeit und Effizienz.
Neben einer unkomplizierten Verwendung von Variablen (Typen"losigkeit",...) zeichnet sich Perl u.a. auch durch eine sehr ausgefeilte Mustererkennung, die regulären Ausdrücke aus, die z.B. eine sehr effektive Programmierung von Filtern oder Reports gestattet.
Perl wurde ursprünglich unter Unix entwickelt, ist jedoch inzwischen für die alle gängigen Betriebssysteme verfügbar.
Als Maskottchen von Perl dient das "Perl-Kamel". Es zierte erstmals den Umschlag des Referenzwerkes 'Programming Perl', das im O'Reilly Verlag herausgegeben wird und als das Kamel-Buch bekannt ist. In einem Interview sagte Tim O'Reilly scherzhaft als Begründung: "Perl ist hässlich und kommt über lange Strecken ohne Wasser aus."
Datenstrukturen
Wichtige Datenstrukturen in Perl sind die skalaren Variablen, die Listen bzw. Arrays und die Hash (assoziative Arrays). Assoziative Arrays werden in Smalltalk Dictionary genannt und in Java HashMap, erfunden wurden sie von Aho, Weinberger und Kernighan im Rahmen von awk.
In einer skalaren Variable können Strings oder Zahlenwerte gespeichert sein. Dasselbe gilt für alle Elemente der Listen oder Hash-Datenstrukturen.
Speziell für Perl ist, dass die Bezeichner für Datenstrukturen mit einem Prefix markiert sind: $ für Skalar @ für Arrays % für Hash.
Während Arrays natürliche Zahlen (standardmäßig mit 0 beginnend) als Index besitzen, sind bei Hashes u.a. auch Zeichenketten oder mehrere Indizes (=> mehrdimensionale "Arrays") erlaubt. Bei Hashes nennt man den "Index" Key, dem ein ein Value zugeordnet ist. Prinzipiell ist jeder Hash ein unsortiertes Array, in dem abwechselnd ein Key und der zugehörige Value gespeichert sind; der umgekehrte Fall gilt nur, falls im Array eine gerade Anzahl von Elementen enthalten sind.
Kontrollstrukturen
Die grundlegenden Kontrollstrukturen unterscheiden sich nicht von denjenigen von C, Java und Javascript:
If ... else
if (Bedingung) { Anweisungen; } [else { Anweisungen; }]
While Schleife
while (Bedingung) { Anweisungen; }
Do ... while
do { Anweisungen; } while (Bedingung);
For - Schleife
for ([Startausdruck]; [Bedingung]; [Inkrementier-Ausdruck]) { Anweisungen; }
Foreach - Schleife
for $element (@meineListe) { Anweisungen; }
Beispiel
Perl wird häufig für so genannte Filterprogramme verwendet. Diese lesen Zeile für Zeile von der Standard-Eingabe-Datei, bearbeiten sie und schreiben das Ergebnis auf die Standard-Ausgabe-Datei. Das Beispiel illustriert den Programmierstil in Perl.
while (defined($line = <STDIN>)) { # Bearbeite hier den Inhalt der Variable $line print $line; }
Weil diese Art Aufgabe in Perl häufig vorkommt, gibt es dafür eine Abkürzung
while (<>) { # Bearbeite hier den Inhalt der vordefinierten Variable $_ print ; }
Anderes Beispiel: Einlesen einer Datei in einen Array von Zeilen
@meinArray = <STDIN>;
Noch ein Beispiel: Zählen von Wörtern und nach Häufigkeit (seltenste zuerst) ausgeben
ausführliche Version:
while ($zeile = <ARGV>) { @worte = split /\s+/, $zeile; foreach $wort (@worte) { $haeufigkeit{$wort}++; } } foreach $wort (reverse sort {$haeufigkeit{$a} <=> $haeufigkeit{$b}} keys %haeufigkeit) { print "$wort: $haeufigkeit{$wort}\n"; }
kurze Version:
map {$_{$_}++} split while <>; print "$_: $_{$_}\n" for reverse sort {$_{$a} <=> $_{$b}} keys %_;
Insbesondere die Möglichkeit, Programme kurz zu halten, wird von Perl-Hackern sehr geschätzt.
Versionen
Die Perlversion, die als Version 6 erscheinen soll, wird zur Zeit komplett neu geschrieben. Sie verfügt über eine eigene virtuelle Maschine.
- nota bene
- Die Skriptsprache Perl darf nicht mir der Programmiersprache Pearl verwechselt werden.
Referenzen
- Randal L. Schwartz, Tom Christiansen - Einführung in Perl, O'Reilly
Weblinks
- www.perl.org
- www.cpan.org
- Virtuelle Maschine für Perl 6 (in Entwicklung)
- http://perl-seiten.bei.t-online.de/ Perl Tutorial