Perl (Programmiersprache)
Dieser Artikel beschäftigt sich mit der Skriptsprache Perl. Den Artikel zu der Gemeinde Perl im Saarland finden Sie unter Perl (Saarland). - Programmiersprachen mit ähnlichem Namen: Pearl
Einleitung
Perl (Practical Extraction and Report Language) ist eine Programmiersprache (genauer: Skriptsprache) für die Erstellung von Computerprogrammen. Die damit geschriebenen Programme sind ihrer (behaupteten) Unübersichtlichkeit halber manchmal scherzhaft als WOPs, write-only programs, bezeichnet worden. Wie in jeder Programmiersprache hängt die Lesbarkeit aber vor allem von Stil, Disziplin und Erfahrung des Programmierers ab.
Perl wurde von Larry Wall entworfen, der es 1993 der Allgemeinheit frei zu Verfügung stellte. Der Benutzer kann dabei zwischen der Artistic Licence oder der GPL wählen. Heute wird Perl von vielen Menschen gemeinsam im Internet als Freie Software weiterentwickelt. Larry Wall bestimmt aber auch heute noch maßgeblich die Entwicklung mit.
Die erste Version wurde 1987 publiziert. Perls Entwurf bezog bewußt praktische Konzepte anderer Programmiersprachen wie C, awk, sed und sogar Lisp ein bzw. entwickelte sie weiter. Programmierer dieser Sprachen finden so besonders leichten Zugang. Insgesamt ist Perls Lernkurve nach Überwindung einer ersten Hürde flach. Man kommt also sehr schnell zu Erfolgserlebnissen, die sehr mächtige Sprache erzwingt allerdings wenig Programmierdisziplin. Die Lösungen auch für sehr komplexe Probleme, die Perl ermöglicht, fallen oft "raffiniert" aus, was es oftmals erschwert, Perlcode zu verstehen, den man nicht selbst geschrieben hat.
Von Anfang an war Perl besonders auf die Verarbeitung von Texten und Textdateien sowie zur Ausgabe von Berichten ausgelegt. Durch zahlreiche Erweiterungen und zusätzliche Bibliotheken hat es sich jedoch längst zu einer auch universell einsetzbaren Sprache weiterentwickelt. Systemadministratoren und Webentwickler (siehe CGI) setzen sie besonders gern ein, aber auch auf vielen anderen Gebieten ist sie zu Hause - ausgenommen sind eigentlich nur Bereiche, in denen Skriptsprachen aus Geschwindigkeitsgründen prinzipbedingt ungeeignet sind.
Perl wurde für den praktischen Einsatz entwickelt und konzentriert sich daher auf einfache Programmierbarkeit, Vollständigkeit und Effizienz. Ein gern zitiertes Motto besagt, dass leichte Dinge einfach und komplexe Dinge möglich sein sollen.
Neben einer unkomplizierten Verwendung von Variablen (Typ"losigkeit",...) zeichnet sich Perl u.a. auch durch einen sehr ausgefeilten Mechanismus zur Textmustererkennung, die regulären Ausdrücke aus, der z.B. eine sehr effektive Programmierung von Filtern oder Reports gestattet. Mit Version 5 wurde es um die Möglichkeit objektorientierter Programmierung erweitert, die sich gut in das Konzept der Sprache einpasst.
Kenner schätzen an Perl neben den schon erwähnten Eigenschaften seine enorme Flexibilität. Typischerweise gibt es sehr viele mögliche Lösungsansätze für ein Problem, so dass jeder die ihm angenehmste Variante finden und verwenden kann. Hier wie auch an anderen Stellen merkt man dem Design die Anlehnung an natürliche Sprachen mit ihren reichen Formulierungsmöglichkeiten an.
Kritiker bemängeln die Tatsache, das Perl dazu einlädt, sehr unübersichtlichen Code zu produzieren, man sagt, Perl ist die einzige Sprache, in der man write-only programmieren kann.
Perl wurde ursprünglich unter Unix entwickelt, ist jedoch inzwischen für die meisten Betriebssysteme verfügbar.
Als Maskottchen von Perl dient ein Dromedar. 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
Basisdatentypen in Perl sind skalare Variablen, Arrays und Hashes (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, Zahlenwerte oder Referenzen auf andere Daten gespeichert sein. Dasselbe gilt für alle Elemente der Array- und Hash-Datenstrukturen. Referenzen als Spezialfälle skalarer Variablen erlauben so die Konstruktion beliebig komplexer Datenstrukturen. Auch /Objekte/ werden über Referenzen verwaltet.
Charakteristisch für Perl ist, dass Datentypen durch ein Prefix angezeigt werden, beispielsweise werden
$ für Skalare ($scalar), @ für Arrays (@array), % für Hashes (%hash), & für Funktionen (&function)
verwendet.
Während Arrays natürliche Zahlen als Index verwenden (die Zählung beginnt standardmäßig mit 0), werden Hasheinträge über einen alphanumerischen Schlüssel ("Key") angesprochen. Hashes und Arrays lassen sich aneinander zuweisen.
Kontrollstrukturen
Die grundlegenden Kontrollstrukturen unterscheiden sich kaum von denen in C, Java und JavaScript:
If:
if (<condition>) { <statements> } [ elsif (<condition>) { <statements> } ]* [ else { <statements> } ]
While-Schleife:
while (<condition>) { <statements> }
Do ... while:
do { <statements> } while (<condition>);
For-Schleife:
for ([<start expression>]; [<condition>]; [<update statement>]) { <statements> }
Foreach-Schleife:
foreach [ [my] $element] (<list>) { <statements> }
Interessant sind nachgestellte Kontrollstrukturen, die es erlauben, die wesentliche Funktion eines Codefragments durch Voranstellen herauszuarbeiten:
doSomething() if $condition;
doNothing() unless $condition;
loop() for @list;
print while <>;
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.
Ein erster Entwurf könnte beispielsweise so aussehen:
while (defined($line = <STDIN>)) { # bearbeite hier den Inhalt der Variable $line ...
# ... und gib das Ergebnis aus print $line; }
Weil diese Art Aufgabe in Perl häufig vorkommt, gibt es dafür eine Abkürzung - das typische Idiom arbeitet implizit mit der Variablen $_:
while (<>) { # gelesene Zeile steht in $_ ...
# ... und kann beispielsweise ausgegeben werden print; }
Anderes Beispiel: Einlesen einer Datei in ein 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 aktuelle stabile Version von Perl ist v5.8.3. Codefreeze für die nächste stabile Version (v5.8.4) war am 31.3.2004; sie soll in Kürze erscheinen.
Die aktuelle "developer version" ist v5.9.1.
Die Perl Version, die als Version 6 erscheinen soll, wird zur Zeit komplett neu geschrieben. Sie verfügt über eine eigene, ebenfalls komplett neu entwickelte virtuelle Maschine namens Parrot. Um Perl 5 Code auch in Zukunft zusammen mit Perl 6 verwenden zu können, entwickelt Arthur Bergman eine Implementierung von Perl 5 auf Parrot unter dem Codenamen Ponie.
Weitere Details zur Geschichte von Perl gibt es unter http://history.cpan.org/.
Perl sollte nicht mit der Programmiersprache Pearl verwechselt werden.
Literatur
- Larry Wall u.a.: Programmieren in Perl, O'Reilly
- Randal L. Schwartz, Tom Christiansen: Einführung in Perl, O'Reilly
- Damian Conway: Objektorientierte Programmierung mit Perl, Manning
- Team: Perl 6 Essentials
Konferenzen
The Perl Conference ist ein großes, von O'Reilly ausgerichtetes, allerdings auch teures Treffen in Amerika. YAPCs (Yet Another Perl Conferences) versuchen, Entwickler in einem möglichst erschwinglichen Rahmen lokal zusammenzuführen und haben inzwischen beispielsweise in Amerika, Europa und Israel Tradition. Der Deutsche Perl-Workshop als Treffen für den deutschsprachigen Raum etablierte sich bereits vor den YAPCs mit ähnlichen Zielen und findet in Zusammenarbeit mit ihnen jährlich statt.
Weblinks
- http://www.perl.com/
- http://use.perl.org/
- http://www.activestate.com/ - Perl vorkompiliert für Windows und ein Cookbook-Archiv mit von Benutzern beigesteuerten "Kochrezepten"
- http://www.cpan.org/ - Comprehensive Perl Archive Network: Module für alle Lebenslagen
- http://www.perl.org/
- http://www.parrotcode.org - Virtuelle Maschine für Perl 6 (in Entwicklung)
- http://perl-seiten.bei.t-online.de/ - Perl-Tutorial
- http://www.perlmonks.org/
- http://www.perlworkshop.de/
- http://www.perlunity.de/
- http://www.perl-community.de
- http://www.cgi-world.de
- Perl-Dokumentation (Manpages)
- http://www.uni-essen.de/~hrz030/perl/ - sehr kompakte Perl-Einführung mit vielen kurzen Beispielcodestücken
- Linksammlung deutschsprachiger Sites mit PERL Schwerpunkt
- Internationale Links zu PERL Sites. Hier findet man zu jedem Problem eine Perl-Lösung :-)