Dieser Artikel beschäftigt sich mit der Programmiersprache Perl. Für andere Bedeutungen siehe Perl (Begriffsklärung).
Perl /Larry Wall entworfene, freie, interpretierte und plattformunabhängige Programmiersprache, die zur Familie der Skriptsprachen gehört. Sie entstand 1987 als Synthese aus C, den UNIX-Befehlen, anderen Programmiersprachen und eigenen Ideen. Als Werkzeug zur System- und Netzwerkadministration entworfen, hat sie auch bei der Entwicklung von Internetprogrammen und in der Bioinformatik weite Verbreitung gefunden. Eine besondere Stärke liegt im Umgang mit Texten. Zielsetzung der Sprache sind maximale Freiheit für Programmierer und schnelle Problemlösung.
/ ist eine vonDer Name Perl bezieht sich auf ein Zitat aus dem Matthäus-Evangelium [13,46], wo Jesus das Himmelreich mit dem Bild eines Händlers beschreibt, der seinen gesamten Besitz verkaufen will, um eine kostbare Perle zu erwerben. Später wurde der Name von Pearl in Perl geändert, da es bereits eine Sprache namens Pearl gab. Allgemein verbreitet und von Larry akzeptiert sind auch die Backronyme Practical Extraction and Report Language und Pathologically Eclectic Rubbish Lister. Die Schreibweise „Perl“ bezeichnet die Sprache, „perl“ dagegen das Programm, das diese Sprache interpretiert.
Geschichte
Entstehung
Larry Wall war Angestellter bei Unisys, wo er 1987 daran beteiligt war, ein verstreutes, sicheres Netzwerk für die NSA zu entwickeln. Er erhielt dabei mehrere Aufträge, Werkzeuge zur Fernwartung und Überwachung der entstehenden Software. Da die vorhanden Sprachen und Werkzeuge ihm zu umständlich erschienen, entwickelte er eine eigene Sprache, um seine Aufgaben zu lösen.
Perl 1–4
Am 18. Dezember 1987 publizierte er sie im damaligen Vorläufer des Internets als Perl 1.0. Damals war Perl wirklich noch, wie der Name sagt, eine bessere Shell, die gut mit Texten und Dateien umgehen konnte, andere Programme steuern und gut lesbare Berichte ausgeben konnte. Bereits im nächsten Jahr erschien die Version 2.0 mit grunderneuerter und erweiterter Regex-Engine und einigen weiteren Verbesserungen. 1989 folgte Perl 3, das auch mit binären Daten umgehen konnte und erstmals auch unter der GPL veröffentlicht wurde. Fast unverändert war es ab dem 12. März 1991 als Perl 4 erhältlich. Jedoch nun wahlweise unter der GPL oder der von Larry entwickelten Artistic License.
Perl 5
Der bisher größte Schritt für Perl war am 18. Oktober 1994 mit Perl 5 geschafft. Neben der Möglichkeit, Dokumentation in den Quelltext einzufügen, und vielen weiteren wichtigen Neuerungen, konnte man nun die Sprache durch separate Module erweitern, was im folgendem Jahr zur Entstehung des CPAN führte. Dieses große Archiv frei erhältlicher Module ist heute selbst ein wichtiger Grund, Perl einzusetzen. Mit Version 5 wurde es auch möglich, objektorientiert in Perl zu programmieren, wobei die objektoriente Syntax geschickt aus anderen Sprachelementen (Packages, Package-Funktionen und Package-Variablen) abgeleitet wurde.
Aktuelle Versionen
Die aktuelle Weiterentwicklung findet in den Entwicklerversionen 5.9.x statt. Für den täglichen Gebrauch werden derzeit die Versionsreihen 5.6.x und 5.8.x gepflegt. Die aktuelle, von Nicholas Clark betreute, Version 5.8.6 ist weitestgehend befreit von den Problemen mit Unicode und Threads, 5.6.2 ist Alternative wegen kleiner Inkompatibilitäten. 5.004 und 5.005 sind veraltet, wichtige Module funktionieren mit ihnen aber weiterhin. Die nächste Benutzerversion 5.10 wird von Hugo van der Sanden vorbereitet.
Perl 6
Am 18. Juli 2000 auf der TPC 4 wurde Perl 6 als die Version der Perl-Gemeindschaft angekündigt. Nachdem Larry Wall mehrere hundert Vorschläge auswertete und thematisch sortierte, schrieb er je Thema einen Überblick seiner Vorstellungen (Apocalypse genannt), der nach Diskussionen in den Mailinglisten von Damian Conway zu einer detaillierten Exegese formuliert wird. Dabei wird die Sprache entrümpelt und mit neuen Fähigkeiten ausgestattet, unter anderem wurde die Objektorientierung komplett neu gestaltet und eine neue Grammar-Engine etwickelt. Diese Neugestaltung der Syntax ist weitestgehend abgeschlossen.
Als Interpreter für Perl 6 ist eine neue registerbasierte Virtuelle Maschine namens Parrot in Entwicklung, die viele Sprachen kompilieren (in Bytecode übersetzen) und ausführen können soll. Sie wurde von Chip Salzenberg und Dan Sugalski entworfen und wird derzeit von Chip und Leo(pold) Tötsch betreut.
Nach der Freigabe von Perl 6 und Parrot soll Perl 5 aber noch lange gewartet werden. Mit einem Parser namens Ponie, den Arthur Bergman derzeit entwickelt, soll Perl 5 auch auf Parrot ausführbar sein.
Autrijus Tang entwickelt seit Anfang Februar 2005 einen alternativen Perl 6-Compiler namens Pugs in der Sprache Haskell. Die Entwicklung geht wesentlich schneller als beim Parrot-Projekt voran und wird es auch ermöglichen, wie geplant den Perl-6-Parser für Parrot in Perl 6 zu schreiben.
Merkmale
Ursprung
Geistig
Es ist naheliegend, dass sich Perls Eigenschaften aus den Gedanken und Überzeugungen ihres Begründers ergeben, der sich stark zum Christentum bekennt, Linguistik studierte, als Admin und Programmierer arbeitete und auch als Humorist und Autor bekannt wurde. Aus seiner christlichen Haltung heraus wollte Larry Wall ein Werkzeug schaffen, das möglichst vielen Menschen als bescheidener Diener die Arbeit erleichtert, sie in ihrer Kreativität unterstützt und sie in ihrer von Gott geschaffenen Einzigartigkeit ernst nimmt. Dafür entwarf er Perl nah an den menschlichen Sprachgewohneiten, was sich in minimalen Vorraussetzungen für Einsteiger, einer starken Kombinierbarkeit der Sprachelemente und einem reichen Wortschatz ausdrückt, der auch verschiedene Befehle mit gleicher Bedeutung zulässt. Wall sieht darin die Bedürfnisse eines Praktikers nach Freiheit und intuitivem Ausdruck verwirklicht.
Praktisch
Gemäss diesem praktischen Ansatz borgte sich Perl seinen Wortschatz und seine logischen Formen von den in den 1980er Jahren unter UNIX verbreiteten Sprachen und Werkzeugen, was das Erlernen vereinfachte, aber auch die UNIX-Philosophie umkehrte, nach der es eine strenge Trennung in compilierende Programmiersprachen(meist C), in denen das Betriebsystem und seine Befehle geschrieben waren und Shell-Scripten mit denen man Befehle schnell und einfach kombinierte, gab. Jeder Befehl war für eine Aufgabe entworfen, und konnte durch Pipes seine Ergebnisse weiterreichen.
Für komplexen Aufgaben waren aber Scripte ungeeignet, da Pipes Nadelöhre für den Datenaustausch sind, Scripte nur eingeschränkt Daten zwischenspeichern können und ihr Ablauf sehr einfach ist. Andererseits sind UNIX-Werkzeuge sehr mächtig und konnten bis zu ca. 30 Zeilen C-Quelltext ersetzen.
Um die Vorteile beider Welten zu nutzen kombinierte Larry C mit Werkzeugen wie grep, sed, awk und Eigenschaften der Bourne Shell, in geringem Maße auch Pascal und BASIC, sowie eigenen Verbesserungen. Diese Fusion ermöglichte kurze, mächtige Programme, die man schnell schreiben und jederzeit auch testen konnte, ohne sie kompilieren zu müssen, was die Entwicklung ebenfalls beschleunigte. Später wurden weitere Fähigkeiten von Sprachen wie LISP, Smalltalk, Python oder Ruby "importiert".
Prinzipien
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.
Ein anderes Parole bezeichnet Perl als die erste postmoderne Programmiersprache. Damit ist gemeint, dass Perl verschiedene Paradigmen vereint und es dem Benutzer frei steht, strukturierte, objektorientierte, funktionale und imperative Sprachmerkmale zu kombinieren.
Neben einer unkomplizierten Verwendung von Variablen (keine Festlegung von Datentypen notwendig) 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 Perl 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. Viele Anweisungen und Befehle in Perl sind der englischen Sprache entlehnt, so zum Beispiel der Befehl my zur Variablenlokalisation. Viele boolesche Operatoren lassen sich auch durch die englischen Begriffe ersetzen, denen sie entsprechen, so zum Beispiel „||“ durch „or“ und „&&“ durch „and“. Dies ermöglicht einen sehr fließenden Programmierstil und verbessert die Lesbarkeit der Programme, kann aber, falsch angewendet, auch den gegenteiligen Effekt verursachen.
Diese Flexibilität wird oft so verstanden, dass Perl dazu einlade, unübersichtlichen Quellcode zu schreiben. Kritiker gehen so weit zu behaupten, Perl sei die einzige Sprache, in der man „write-only“ programmieren könne, dass also ein einmal geschriebenes Programm nicht mehr für andere zu verstehen sei. Tatsächlich bietet Perl viele Möglichkeiten, unleserlichen Code zu produzieren, aber letztlich liegt es am Willen und der Disziplin des Programmierers, Les- und Wartbarkeit zu erreichen. Denn andererseits ermöglicht die gleiche Freiheit auch besonders nah am Problem oder nah am menschlichen Verständnis zu programmieren, was zu einer sonst unerreichbaren Lesbarkeit führen kann.
Mehrere Wege
Das bekannteste Perl-Motto ist There is more than one way to do it(kurz TIMTOWTDI oder auch Tim Today). Auf deutsch bedeutet das: Es gibt mehr als einen Weg etwas zu tun.
Einfach und möglich
Der andere wichtige Perl-Merksatz ist keep simple tasks simple, and make hard tasks possible, was zu deutsch bedeutet Halte die einfachen Arbeiten einfach und mach (die Lösung der) schwere(n) Aufgaben möglich.
Technische Merkmale
Verbreitung
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 sich Perl jedoch längst zu einer auch universell einsetzbaren Sprache weiterentwickelt. Systemadministratoren und Webentwickler (siehe CGI, HTML::Mason) setzen sie besonders gern ein. Ein weiteres Hauptanwendungsfeld ist das Data-Munging, aber auch auf vielen anderen Gebieten ist Perl zu Hause – ausgenommen sind eigentlich nur Bereiche, in denen Skriptsprachen aus Geschwindigkeitsgründen ungeeignet sind.
Logos
Als Maskottchen von Perl dient ein Dromedar. Es zierte erstmals den Umschlag des Referenzwerkes Programming Perl, welches 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. Das Dromedar ist auf dem Programming Republic of Perl Emblem zu sehen, das oft als offizielles Perl-Logo angesehen wird und dessen nichtkommerziellen Gebrauch O'Reilly gestattet. Andere im Zusammenhang mit Perl benutzte Logos sind neben Perlen, die aufgeschnittene Zwiebel (Erkennungszeichen der Perl Foundation), und der Komodowaran der die weit verbreitete Perl Distribution von Active State schmückt.
Syntax
Freies Format
Perl erlaubt freies Formatieren des Quellcodes. Das bedeutet, dass Einrückungen und zusätzliche Leerzeichen syntaktisch unerheblich sind und auch Zeilenumbrüche nach Belieben eingefügt werden können. Logische Konsequenz dieser Freiheit ist die Notwendigkeit, jeden Befehl mit einem Semikolon abzuschliessen.
Datenstrukturen
Basisdatentypen in Perl sind skalare Variablen, Arrays und Hashes (assoziative Arrays). Daraus lassen sich beliebig neue Datenstrukturen erzeugen, zum Beispiel Hashes bestehend aus Arrays.
In einer skalaren Variablen können Strings, Zahlen 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 (auch Sigil genannt) angezeigt werden, hier einige Beispiele.
$ für Skalare: $scalar @ für Arrays: @array % für Hashes/assoziative Arrays: %hash & für Funktionen (oft optional): &function * für Typeglobs: *all
Während Arrays natürliche Zahlen als Index verwenden (die Zählung beginnt standardmäßig mit 0), werden Hash-Einträge über einen alphanumerischen Schlüssel (Key) angesprochen (Key/Value-Paare). Hashes und Arrays lassen sich einander zuweisen.
Kontrollstrukturen
Die grundlegenden Kontrollstrukturen unterscheiden sich kaum von denen in C, Java und JavaScript:
If-Then-Else-Strukturen
if (<condition>) { <statements> } elsif (<condition>) { <statements> } else { <statements> }
Negierte If-Then-Struktur:
unless (<condition>) { <statements> }
Schleifen
While-Schleife:
while (<condition>) { <statements> }
Do-While-Schleife:
do { <statements> } while (<condition>);
For-Schleife:
for ([<start expression>]; [<condition>]; [<update statement>]) { <statements> }
Foreach-Schleife, diese durchläuft Listen. $element
ist eine Referenz auf das jeweilige Element:
foreach [ [my] $element] (<list>) { <statements> }
Nachgestellte Kontrollstrukturen
Eine interessante Option in Perl sind nachgestellte Kontrollstrukturen, die es erlauben, die wesentliche Funktion eines Codefragments durch Voranstellen herauszuarbeiten, und die den (englischsprachigen) Lesern das Verständnis durch natürlichsprachige Formulierungen erleichtern:
doSomething() if <condition>; # Normal: if (<condition>) {doSomething();} doSomething() unless <condition>; # Normal: unless (<condition>) {doSomething();} loop() for @list; # Normal: foreach @list {loop();} print while <STDIN>; # Normal: while(<STDIN>) {print;}
Dokumentation
- Plain Old Documentation (POD) ist die Beschreibungssprache für die Dokumentation von Perlprogrammen.
Spaß mit Perl
Viele Spracheigenschaften von Perl laden dazu ein, Programmcode kreativ zu gestalten. Dies hat zu verschiedenen intellektuellen, teils humorvollen, teils skurrilen Wettbewerben und Traditionen um die Programmiersprache Perl geführt.
Golf
Golf ist eine Sportart für Programmierer bei der das kürzeste Programm (in ASCII-Zeichen), das eine gestellt Aufgabe vollständig erfüllt, gewinnt. Da Perl viele, teils trickreiche Kürzel und Abkürzungen gängiger Techniken kennt ist dies eine besonders populäre Disziplin unter Perl-Programmierern.
Poesie
Eine anderer Wettbewerb prämiert die besten Beispiel in Perl-Poesie, die in 2 Kategorien betrieben wird. Neben der freien Form, die lediglich Perl zum Inhalt hat, wird hier versucht Gedichte zu schreiben, die vom Interpreter ohne Warnungen und Fehlermeldungen ausgeführt werden. Da Perl viele Elemente der englischen Sprache beinhaltet, ist dies durchaus möglich, so erscheinen zum Beispiel regelmäßig neue Gedichte in der Perl Poetry-Kategorie des englischsprachigen Perl Monks-Forums. Daneben gibt es auch noch einen Perl - Haiku Wettbewerb, der dieser japanischen Gedichtform gewidmet ist.
Obfuscation
Sehr berühmt und berüchtigt ist auch die Disziplin obfuscation, für die es auch einen jährlichen Wettbewerb gibt, der am ehesten mit dem International Obfuscated C Code Contest vergleichbar ist, denn Larry selbst zweimal gewann. Hier wird danach gestrebt, auf ungewöhnliche und kreative Art und Weise die Funktion eines Programms zu verschleiern. Dies ist in Perl besonders leicht, da es für fast alles Kürzel gibt, die Sprache selbst sehr dynamisch ist und viele Dinge abhängig vom Kontext automatisch geschehen, was auch oft als „Perl-Magie“ bezeichnet wird.
JAPH
Eine Art Unterkategorie von obfuscation sind die von Merlin Randal L. Schwartz begründeten Disziplin: JAPH. Das sind Signaturen die kleine Perl Programme enthalten welche meisst nur den Namen des Autoren oder eine Botschaft auf eine möglichst nicht nachvollziehbare Art ausgeben. Die Buchstaben JAPH sind die Anfangsbuchstaben von Merlins Signatur Just Another Perl Hacker.
Perligata
Das Perl-Modul Lingua::Romana::Perligata von Damian Conway ist wohl eines der skurrilsten Module schlechthin: Es ermöglicht dem Benutzer, Perl komplett in Latein zu schreiben. Wie in der lateinischen Sprache ist die Satzstellung (weitgehend) irrelevant für die Bedeutung eines Ausdrucks. Von Variablen bis Referenzen und mehrdimensionalen Arrays ist alles in dieser neuen Sprachdefinition vorhanden. Nahezu alle Sonderzeichen wurden aus der Sprache entfernt, Variablen gleicher Namen, aber unterschiedlicher Struktur (Beispielsweise $next und @next) werden dekliniert, um die entsprechende Variable zu adressieren. Etwas Beispielcode:
insertum stringo unum tum duo excerpemento da. # Entspricht in Perl: substr($string,1,2) = $insert; clavis hashus nominamentum da. # Entspricht: @keys = keys %hash;
Aus ähnlichem Antrieb enstanden „Sprach-Module“ für klingonisch, Borg oder Leetspeak. Solche Module sind ein gutes Beispiel für den Zeitaufwand, den viele Leute Perl widmen, Perl kann man in diesem Sinne durchaus als Hobby bezeichnen.
Acme
Brian Ingerson legte mit seinem bekanntem Modul namens Acme, das nichts weiter tut, als dem Benutzer zu bescheinigen, sein Programm habe den Höchstgrad an Perfektion erreicht, einen Grundstein für eine CPAN Kategorie von Modulen, die keinen produktiven Nutzen haben, sogar oft bewusst kontraproduktiv sind oder eine Funktion vorgeben, die unmöglich so erreicht werden kann und eher als Witz zu verstehen ist. Dieses Spiel mit skurrilen Ideen umfasst beeindruckende ASCII-Art, Module die den Quellcode unsichtbar machen(Acme::Bleach), oder sonstig humorvoll manipulieren, indem sie ihn zum Beispiel mit typischen Sprachfehlern des Präsidenten Bush versehen oder Methoden zufällig löschen, was die Anwesenheit einer diebischen Elster simulieren soll.
Mottos und Zitate
Es gibt viele bekannte Mottos und Zitate, die sich mit Perl selbst oder den Möglichkeiten der Sprache beschäftigten, hier einige Kostproben.
- Perl: the Swiss Army Chainsaw of Programming Languages.
- There's more than one way to do it (Timtowtdi)
- ... we often joke that a camel is a horse designed by a committee, but if you think about it, the camel is pretty well adapted for life in the desert. The camel has evolved to be relatively self-sufficient. On the other hand, the camel has not evolved to smell good. Neither has Perl. (Larry Wall über das Kamel als Perl-Maskottchen)
Weitere Informationen
Literatur
- Larry Wall u. A.: Programmieren in Perl, O'Reilly Verlag, ISBN 3897211440
- Randal L. Schwartz, Tom Christiansen: Einführung in Perl, O’Reilly, ISBN 3897211475
- Joseph N. Hall, Randal L. Schwartz: Effective Perl Programming, Addison-Wesley Professional, ISBN 0201419750
- Damian Conway: Object Oriented Perl, Manning 2000, ISBN 1884777791 ((in schlechter Übersetzung) deutsch bei Addison-Wesley 2001: Objektorientiert Programmieren mit Perl, ISBN 3827318122)
- Mark Jason Dominus: Higher-Order Perl, Morgan Kaufmann, ISBN 1558607013
- Randall, Sugalski, Tötsch: Perl 6 & Parrot Essentials, O’Reilly 2004, ISBN 059600737X
Konferenzen und Workshops
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. Inzwischen werden auch in vielen anderen Ländern Workshops organisiert.
Termine
- Am 9. und 10. Juni 2005 findet in Wien der 2. österreichische Perl Workshop statt.
- Der 8. deutsche Perl-Workshop findet vom Mittwoch, 1. März 2006 (Aschermittwoch) bis Freitag, 3. März 2006 in Bochum statt. Dieser ist an professionelle Perl-Entwickler gerichtet, welche bereits an größeren Perl-Projekten beteiligt waren.
Weblinks
Vorlage:Wikibooks1 Vorlage:Wikibooks2
Allgemeine Informationen
- http://www.perl.org/ – Offizielle Homepage von Perl
- http://www.cpan.org/ – CPAN – Perlmodularchiv
- http://www.activestate.com/ – Perl vorkompiliert für Windows und ein Cookbook-Archiv mit von Benutzern beigesteuerten „Kochrezepten“
- http://history.perl.org/PerlTimeline.html – Perl-Zeitlinie
- http://www.theperlreview.com/ - Perl-Online-Journal
- http://perlcast.com/ - Perl-Nachrichten in Audioformat
Hilfe zu Perl
- http://perldoc.perl.org/ – Die Online-Version der Perl-Dokumentation
- http://perl-seiten.privat.t-online.de/ – Gutes deutsches Perl-Tutorial für Einsteiger
- http://www.uni-essen.de/~hrz030/perl/ – Sehr kompakte Perl-Einführung mit vielen kurzen Beispielcodestücken
Perl-Benutzer
- http://www.perlmonks.org/ – Internationales Internetforum der Perl-Benutzer
- http://www.perl-community.de/ – Forum deutscher Perl-Benutzer
- http://www.perl.de/ – Deutschsprachiges Perl-Forum
- http://www.perlunity.de/ – Deutschsprachige Perl-Community
- http://pm.org – Perl Mongers – lokale Benutzergruppen