Perl (Programmiersprache)
Perl [freie, plattformunabhängige und interpretierte Programmiersprache, die mehrere Paradigmen unterstützt. ] ist eineDer Linguist Larry Wall entwarf sie 1987 als Synthese aus C, awk, den Unix-Befehlen und anderen Einflüssen. Ursprünglich als Werkzeug zur Verarbeitung und Manipulation von Textdateien insbesondere bei der System- und Netzwerkadministration vorgesehen (zum Beispiel für die Auswertung von Logdateien), hat Perl auch bei der Entwicklung von Webanwendungen und in der Bioinformatik weite Verbreitung gefunden. Traditionell vertreten ist Perl auch in der Finanzwelt, vor allem bei der Verarbeitung von Datenströmen verschiedenartiger Nachrichtenquellen. Hauptziele sind eine schnelle Problemlösung und größtmögliche Freiheit für Programmierer. Die Bearbeitung von Texten mit Hilfe regulärer Ausdrücke und ein großer Gestaltungsspielraum sind Stärken der Sprache. Perl zählt zu den Allzweck-Programmiersprachen. GeschichteEntstehung![]() Larry Wall war als Administrator und Programmierer bei dem Unternehmen Unisys angestellt, wo er seit März 1987 daran beteiligt war, unter dem Namen blacker ein sicheres Netzwerk für die NSA zu entwickeln. Er erhielt mehrere Aufträge, Werkzeuge zur Überwachung und Fernwartung der entstehenden Software zu schaffen. Eine Hauptaufgabe war dabei, übersichtliche Berichte aus verstreuten Logdateien zu erzeugen. Da ihm die vorhandenen Sprachen und Werkzeuge dafür zu umständlich erschienen, entwickelte er mit Hilfe seines damaligen Teamkollegen Daniel Faigin und seines Schwagers Mark Biggar schrittweise eine eigene Sprache, um seine Aufgaben zu lösen. Dabei griff er auch auf sein Wissen und seine Erfahrung als Linguist zurück und entwarf Perl nahe an den menschlichen Sprachgewohnheiten. Dies drückt sich in minimalen Voraussetzungen für Einsteiger, einer starken Kombinierbarkeit der Sprachelemente und einem reichen Wortschatz aus, der auch Befehle zulässt, deren Bedeutungen sich überschneiden. Wall sieht darin die Bedürfnisse eines Praktikers nach Freiheit und intuitivem Ausdruck verwirklicht. Gemäß diesem praktischen Ansatz borgte sich Perl seinen Wortschatz und seine logischen Strukturen von den in den 1980er Jahren unter Unix verbreiteten Sprachen und Werkzeugen, was das Erlernen vereinfachte, aber auch die Unix-Philosophie umkehrte. Unix und seine Systembefehle waren kompiliert und meist in C geschrieben. Diese Befehle waren logische Einheiten und sollten genau eine Aufgabe beherrschen: „Do one thing and do it well“ („Mach genau eine Sache und mach sie gut“). Interpretierte Shell-Skripte kombinierten schnell und einfach die Befehle, die untereinander ihre Ergebnisse durch Pipes weiterreichen konnten. Perl verletzt diese Philosophie, indem es diese Befehle zum Bestandteil der Programmiersprache macht, also C und Shell vereint und die vorhandenen Befehle und Werkzeuge übergeht. Dies wurde notwendig, weil Shell-Skripte für komplexe Aufgaben ungeeignet waren. Ihr Ablauf ist sehr einfach, sie können Daten nur eingeschränkt zwischenspeichern und die Pipes sind Flaschenhälse beim Datenaustausch. Andererseits erlauben sie einen wesentlich kompakteren Programmierstil, da die Benutzung eines UNIX-Werkzeugs viele Zeilen C-Quelltext ersetzen kann. Um die Vorteile beider Programmierarten nutzen zu können, schuf Wall eine Kombination aus C und Werkzeugen wie sed, awk, grep und sort. Er fügte Eigenschaften der Bourne Shell, in geringem Maße auch Elemente aus Pascal und BASIC, sowie eigene Ideen dazu.[5] 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“. NameDer Name Perl bezieht sich auf ein Zitat aus dem Matthäus-Evangelium (Mt 13,46 EU),[6] in dem Jesus das Himmelreich mit dem Bild eines Händlers beschreibt, der seinen gesamten Besitz verkaufen will, um eine kostbare Perle zu erwerben. Noch vor der Veröffentlichung wurde der Name von „Pearl“ in „Perl“ geändert, da es bereits eine Programmiersprache namens PEARL gab. Allgemein verbreitet und von Larry Wall akzeptiert sind auch die Backronyme Practical Extraction and Report Language (zweckmäßige Extraktions- und Berichtssprache) und Pathologically Eclectic Rubbish Lister (krankhaft stilmischender Blödsinnsauflister). Die Schreibweise „Perl“ bezeichnet die Sprache, „perl“ dagegen das Programm, das diese Sprache interpretiert. Ferner legt die Perl-Gemeinde Wert darauf, dass nicht die Schreibweise „PERL“ verwendet wird, da es sich nun mal nicht um ein Akronym handelt.[7] Perl 1 bis 4![]() Am 18. Dezember 1987[8] publizierte Larry Wall sein Programm im Usenet als Perl 1.0, das damals noch eine mächtigere Shell war, die gut mit Texten und Dateien umgehen, andere Programme steuern und gut lesbare Berichte ausgeben konnte. Bereits am 5. Juni im Jahr darauf erschien die Version 2.0 mit grunderneuerter und erweiterter Regex-Engine und einigen weiteren Verbesserungen. Am 18. Oktober 1989 folgte Perl 3, das mit binären Daten umgehen konnte und auch Netzwerkprogrammierung ermöglichte. Als neue Lizenz wurde die GPL gewählt. Fast unverändert war es ab dem 21. März 1991 als Perl 4 erhältlich, jedoch nun wahlweise unter der GPL oder der von Larry Wall entwickelten Artistic License. Der eigentliche Grund für die neue Version war aber das gleichzeitig erschienene Kamelbuch, das als Referenz für den aktuellen, als Version 4 markierten Stand veröffentlicht wurde. Bis dahin waren die seit Perl 1 verfügbaren UNIX-man-pages die einzige verfügbare Dokumentation. Diese bieten zu jedem Thema eine fundierte und umfangreiche Abhandlung, aber keinen einfachen Einstieg für Perl-Anfänger. Diese Lücke sollte das von Randal L. Schwartz, Larry Wall und Tom Christiansen verfasste Buch schließen. Es erschien im O’Reilly Verlag, der mit diesem und weiteren Titeln als renommierter Fachverlag für Programmierer bekannt wurde. Perl-Bücher von O’Reilly wurden die maßgeblichen Publikationen, was sich erst im neuen Jahrtausend etwas relativierte. Der Verlag betrieb auch unter der Internetadresse perl.com das meistbesuchte Online-Magazin für Perl-Programmierung und veranstaltet mit der TPC (The Perl Conference – heute OSCON) die größte Perl-Konferenz. O’Reilly profitierte von Perls wachsender Popularität, und im Gegenzug bezahlte Tim O’Reilly seinem Freund Larry Wall in den folgenden Jahren ein festes Gehalt, der sich so, ohne weitere Pflichten oder Vorgaben, der Weiterentwicklung der Sprache widmen konnte. 1993, als Perl die Version 4.036 erreichte, brach Larry Wall die Weiterentwicklung ab und entwickelte Perl 5 vollständig neu. Perl 5![]() Perl 5.0 wurde am 18. Oktober 1994 veröffentlicht und war der bis dahin größte Fortschritt für die Sprache. Mit Plain Old Documentation konnte man nun formatierte Dokumentation in den Quelltext einfügen. Auch ließ sich die Sprache ab jetzt durch separate Module erweitern, was im folgenden Jahr zur Entstehung des CPAN führte. Dieses große Archiv frei erhältlicher Module wurde schließlich selbst ein wichtiger Grund, Perl einzusetzen. Eine weitere, wichtige Neuerung war die Einführung von Referenzen, die erstmals eine einfache Erstellung zusammengesetzter Datenstrukturen erlaubte. Mit Version 5 wurde es auch möglich, objektorientiert in Perl zu programmieren. Dabei wählte Larry Wall einen ungewöhnlichen Weg und leitete die dafür verwendete Syntax fast ausschließlich aus vorhandenen Sprachelementen ab (Packages, Package-Funktionen und Package-Variablen sowie den neuen Referenzen). Lediglich die Funktion Seit der Veröffentlichung von Perl 5 beteiligte sich Larry Wall kaum noch an der Entwicklung der Sprache. Dies übernahmen freiwillig Perl-begeisterte Programmierer, die sogenannten Perl 5 Porters, die über die im Mai 1994 gegründete p5p-Mailingliste kommunizieren, aber auch zunehmend über einen eigenen Bug- und Request-Tracker (RT) über Fehlerbehebungen und neue Funktionen der Sprache entscheiden. Dabei übernimmt je Version ein sogenannter Pumpking die Leitung. Der Begriff Perl Porter entstammt der ursprünglichen Aufgabe der p5p-Liste, die Portierung von Perl auf andere Betriebssysteme zu koordinieren. In den Jahren nach Version 5.0 wurde nicht nur Perl auf Macintosh und Windows portiert, sondern es verschob sich auch die Nummerierung der Versionen. Da sich an der Syntax nichts Wesentliches änderte, beließ man die 5 und erhöhte bei größeren Meilensteinen die erste Nachkommastelle, verwendete aber zusätzliche Nummern, um die Zwischenschritte zu zählen. Da Perl erst ab 5.6 mit Versionsnummern, die mehrere Kommata enthalten, umgehen konnte, wurden sie bis dahin z. B. Perl 5.001 oder Perl 5.001012 geschrieben. Ab 5.6 wurde auch das damals von Linux verwendete Versionsschema übernommen, bei dem gerade Nummern auf Fehlerfreiheit gepflegte Benutzerversionen hindeuten und ungerade auf Entwicklerversionen, in die neue Funktionen einfließen. Serien von Benutzerversionen (z. B. 5.8.x) werden untereinander binär kompatibel gehalten, was bedeutet, dass ein für Perl 5.8.7 kompiliertes Binärmodul auch mit 5.8.8, nicht jedoch zwingend mit 5.10 oder 5.6.1 funktioniert. Perl 5.6 Diese Version brachte am 22. März 2000 einige neue experimentelle Fähigkeiten, die erst später ausreiften, wie Unicode und UTF-8, Threads und cloning. Auch 64-Bit-Prozessoren konnten nun genutzt werden. Sprachlich fügte diese von Gurusamy Sarathy geleitete Reihe vor allem lexikalisch globale Variablen (mit Perl 5.8 Mit der am 18. Juli 2002 von Nicholas Clark betreuten Reihe 5.8.x wurden vor allem die Probleme mit Unicode und den Threads behoben, aber auch die Ein-/Ausgabe (IO), Signale und die numerische Genauigkeit wurden entscheidend verbessert. Ab Perl 5.10Neben verringertem Speicherverbrauch und einer erneuerten und nun auch austauschbaren Regex-Maschine brachte diese Version am 18. Dezember 2007 unter der Führung von Rafaël Garcia-Suarez vor allem Neuerungen, die dem Entwurf von Perl 6 entstammen und deren Gebrauch entweder einzeln oder kollektiv mit Im folgenden Jahr wurden die Quelle von Perforce auf Git umgestellt, was die Entwicklung und Herausgabe neuer Versionen wesentlich vereinfachte. Perl 5.12 Diese von Jesse Vincent geleitete Version vom 12. April 2010 beinhaltet weit weniger große und sichtbare Veränderungen als 5.10. Perl 5.14 Ab 14. Mai 2011 erleichtern neue Modifikatoren und Steuerzeichen den Umgang mit Unicode, der auf den Stand 6.0 gebracht wurde. Built-ins für Listen und Hashes dereferenzieren automatisch (autoderef) und weite Teile der Dokumentation wurden überarbeitet oder neu geschrieben. Auch die Unterstützung von IPv6 wurde verbessert, sowie das Anbinden von Multithread-Bibliotheken erleichtert. Perl 5.16 Die am 20. Mai 2012 herausgegebene Version beinhaltet zahlreiche syntaktische Glättungen, in Teilen erneuerte Dokumentation und den Wechsel zu Unicode 6.1. Die Leitung hatte Jesse Vincent und ab November 2011 Ricardo Signes. Durch einen neu eröffneten Spendentopf der Perl Foundation konnten zudem zwei langjährige Entwickler dazu verpflichtet werden, undankbare Aufgaben zum Abschluss zu führen und den Build-Prozess zu vereinfachen. Einzige grundlegend neue Funktionalität ist das mit Perl 5.18 Die am 18. Mai 2013 erschienenen Funktionalitäten lexikalische Subroutinen (lexical_subs) und mit Mengenfunktionen erzeugte Zeichenklassen innerhalb regulärer Ausdrücke sind beide experimentell. Solche Funktionen, zu denen auch lexikalische Kontextvariablen (lexical_topic) und der Smartmatch-Operator gehören, erzeugen jetzt Warnhinweise, die mit no warnings 'experimental::funktionsname'; oder no warnings 'experimental'; abgeschaltet werden können. Die Hashes wurden konsequent randomisiert, um Programme besser gegen DoS-Attacken zu schützen. Perl 5.20 Ebenfalls unter der Führung von Ricardo Signes kamen am 27. Mai 2014 die experimentellen Funktionalitäten der Subroutinen-Signaturen (signatures) und (postderef) eine alternative Postfix-Syntax zum Dereferenzieren. Das mit 5.14 aufgenommene autoderef wurde als experimentell herabgestuft. Unicode 6.3 wird unterstützt und mit drand48 hat Perl nun einen eigenen, plattformunabhängig guten Zufallszahlengenerator. String- und Arraygrößen sind jetzt 64-Bit Werte. Perl 5.22 Mit dem 1. Juni 2015 kamen der Doppeldiamantoperator (<<>>), bitweise Stringoperatoren (&. |. ^. ~.), ein 'strict'-Modus für reguläre Ausdrücke Perl 5.24 brachte am 9. Mai 2016 Beschleunigungen für Blöcke und numerische Operationen, sowie Unicode 8.0. Die Features postderef und postderef_qq wurden angenommen – autoderef und lexical_topic entfernt. Perl 5.26 Unter Leitung von SawyerX wurde am 30. Mai 2017 die Regex-Option xx, einrückbare Here-Dokumente und Unicode 9.0 eingeführt. Das Feature lexical_subs wurde angenommen und Perl 5.28 Erschien am 22. Juni 2018. Nebst Unicode 10.0 erhielt Perl alpha assertions in Lang- und Kurzfassungen. Das sind Aliase für besondere Regex-Gruppen mit sprechenden Namen: zum Beispiel anstatt Perl 5.30 Aktualisierte am 22. Mai 2019 auf Unicode 12.1, führte die Unicode Wildcard Properties ein und erlaubte einen lookbehind in der Länge zu begrenzen. Entfernt wurden Perl 5.32 Führte am 20. Juni 2020 verkettete Vergleichsoperatoren ( Perl 5.34 Am 20. Mai 2021 wurde eine Ausnahmebehandlung a la Try::Tiny (feature try) in den Kern übernommen und die alternative Schreibweise für Oktaldarstellung von Literalen Perl 5.36 Ricardo Signes verkündete am 28. Mai 2022 Ausnahmen mit Perl 5.38 Mit 2. Juli 2023 kam eine Objektorientierung die mit den Schlüsselworten Perl 5.40 Am 9. Juni 2024 wurden das Attribut Aktuelle VersionenAuch wenn die neueste Benutzerversion 5.40.0 lautet, wird derzeit die Versionsreihe 5.38.x weiterhin gepflegt (aktuell ist 5.38.4). Die Versionen 5.36.3, 5.34.3, 5.32.1, 5.30.3, 5.28.3, 5.26.3, 5.24.4, 5.22.4, 5.20.3, 5.18.2, 5.16.3, 5.14.4, 5.12.5, 5.10.1 und 5.8.9 sind Schlusspunkte ihrer Reihe, sicherheitsrelevante Verbesserungen werden noch bis zu 3 Jahre nach Veröffentlichung einer Version nachgereicht. Bei Kernmodulen wird meist auf eine Kompatibilität bis zu 5.6 geachtet, bei wichtigen CPAN-Modulen meist 5.8.3. Änderungen finden im Entwicklerzweig mit ungerader Versionsnummer statt (aktuell 5.41.x), der nicht für allgemeine Benutzung bestimmt ist. Da sich Perl 6 zu einer eigenständigen Sprache entwickelt hat, wird die nächste große Version Perl 7 heißen. Raku (Perl 6)Perl 6, das 2020 zu Raku umbenannt wurde, ist eine Schwestersprache, deren Interpreter und die umgebende Infrastruktur vollständig neu entworfen wurden. MerkmalePrinzipienPerl wurde für den praktischen Einsatz entwickelt und konzentriert sich daher auf schnelle und einfache Programmierbarkeit, Vollständigkeit und Anpassbarkeit. Diese Philosophie drückt sich in den folgenden Schlagworten oder Phrasen aus, die meist von Larry Wall stammen. Mehrere WegeDas bekannteste und grundlegendste Perl-Motto ist „There is more than one way to do it“ (deutsch: „Es gibt mehr als einen Weg, etwas zu tun“), was meist zu TIMTOWTDI (selten TMTOWTDI) oder (mit englischer Kontraktion) „Tim To[a]dy“ verkürzt wird.[9] Perl macht im Gegensatz zu Sprachen wie Python weniger Vorgaben und bietet absichtlich für jedes Problem mehrere Formulierungs- und Lösungsmöglichkeiten (Syntaktischer Zucker). Zum Beispiel kann man logische Operatoren als Ein weiteres Schlagwort, das man auch als Erweiterung von TIMTOWTDI sehen kann, bezeichnet Perl als die erste postmoderne Programmiersprache. Damit ist gemeint, dass Perl verschiedene Paradigmen vereint und es dem Benutzer freisteht, strukturierte, objektorientierte, funktionale und imperative Sprachmerkmale zu kombinieren. Einfach und möglichDer andere wichtige Merksatz ist Perl makes easy jobs easy and hard jobs possible, was zu deutsch bedeutet „Perl hält die einfachen Aufgaben einfach und macht (die Lösung) schwierige(r) Aufgaben möglich“. Dies beinhaltet zum ersten das Ziel, gängige Aufgaben möglichst mit kurzen „fertigen Lösungen“ zu vereinfachen. Zum Beispiel prüft KontextsensitivIn Perl gibt es Befehle, die verschiedene Bedeutungen haben, je nachdem in welchem Zusammenhang sie benutzt werden. Derart kontextsensitiv sind Datenstrukturen wie das Array. Wird es einem anderen Array zugewiesen, wird dessen Inhalt übergeben; ist der Empfänger ein einzelner Wert (Skalar), erhält dieser die Länge des Arrays. Technische MerkmaleDer Perl-Interpreter selbst ist ein in C geschriebenes Programm, das auf annähernd jedem Betriebssystem kompilierbar ist. Vorkompilierte Versionen auf selten verwendeten Systemen wie zum Beispiel BeOS oder OS/2 sind jedoch nicht immer auf dem neuesten Stand. Der Quellcode umfasst circa 50 MB und enthält auch Perl-Skripte, die die Funktion von Makefiles und der Test-Suite übernehmen. Typischerweise ist das kompilierte Programm circa 850 KB groß, was aber je nach Betriebssystem, verwendetem Compiler und Bibliotheken variieren kann. Perl-Skripte werden in Textdateien mit beliebigem Zeilentrennzeichen gespeichert. Beim Start eines Skripts wird es vom Perl-Interpreter eingelesen, in einen Parse Tree umgewandelt, dieser zu Bytecode, welcher dann ausgeführt wird. Der im Interpreter integrierte Parser ist eine angepasste Version von GNU Bison. Strenggenommen ist Perl daher keine interpretierte Sprache, da ein Perl-Programm vor jeder Ausführung kompiliert wird. Das führt etwa dazu, dass – anders als bei rein interpretierten Sprachen – ein Programm mit Syntaxfehlern oder fehlenden Abhängigkeiten nicht startet. VerbreitungZu Beginn war Perl ein UNIX-Werkzeug, das besonders auf die Verarbeitung von Textdateien, Steuerung anderer Programme sowie zur Ausgabe von Berichten ausgelegt war. Dafür wird es bis heute, nicht nur von Systemadministratoren, auf allen verbreiteten Betriebssystemen eingesetzt. Dabei bekam Perl auch den Ruf einer glue language („Klebstoff-Sprache“), weil mit Hilfe von relativ schnell geschriebenen Perl-Skripten inkompatible Software verbunden werden kann. Bis heute gehört Perl auf allen POSIX-kompatiblen und Unix-ähnlichen Systemen zur Grundausstattung. Mit der Verbreitung des World Wide Web wurde Perl zunehmend benutzt, um Webserver, Datenbanken und weitere Programme und Daten zu verbinden und die Ergebnisse in Form von HTML-Seiten auszugeben. Der Perl-Interpreter wird dabei über CGI oder FastCGI vom Webserver angesprochen oder ist direkt im Server eingebettet. (mod_perl im Apache, ActiveState PerlEx im Microsoft IIS). Auch wenn für diese serverseitige Skript-Programmierung PHP mittlerweile populärer wurde, wird Perl weiterhin von vielen großen und kleinen Seiten und Internetdiensten wie Amazon.com, IMDb.com, slashdot.org, Movable Type, LiveJournal und Xing verwendet. Da Perl-Skripte oft kaum erkennbar an vielen wichtigen Stellen arbeiten, wurde Perl auch scherzhaft als das Klebeband bezeichnet, welches das Internet zusammenhält. In Perl entstanden auch Frameworks wie Mason, Catalyst, Jifty, Mojolicious und Dancer, die eine sehr schnelle Entwicklung komplexer und leicht veränderbarer Webseiten erlauben. Auch Wiki-Software ist häufig in Perl geschrieben wie z. B. Socialtext, welches auf Mason basiert, Kwiki, TWiki, Foswiki, ProWiki oder UseMod. Auch verbreitete Ticket-Systeme mit Webschnittstelle wie Bugzilla oder RT sind in Perl geschrieben. Jedoch sind WWW-Anwendungen weiterhin nur eines der vielen Einsatzgebiete von Perl. Wichtige Perl-Programme im E-Mail-Bereich sind SpamAssassin (Spam-Filter), PopFile und open webmail. Zur Systemverwaltung wird Perl zum Beispiel in debconf, einem Teil der Paketverwaltung des Betriebssystems Debian, benutzt. Weitere Hauptanwendungsfelder sind das Data-Munging und die Bioinformatik, wo Perl seit etwa 1995 die am häufigsten verwendete Sprache war und immer noch bedeutend ist. Gründe hierfür sind wieder die Fähigkeit, Informationen in Textform zu verarbeiten, und die Flexibilität und Offenheit der Sprache, die es der internationalen Forschergemeinde erlauben, trotz unterschiedlicher Standards der Institute zusammenzuarbeiten. BioPerl ist hier die wichtigste Sammlung frei erhältlicher Werkzeuge, die sich vor allem auf das Gebiet der Genomsequenzenanalyse konzentriert. Beim Human Genome Project spielte Perl eine wichtige Rolle. Auch Desktop-Anwendungen und Spiele wie Frozen Bubble können in Perl geschrieben werden. Die heutigen Computer sind schnell genug, diese Programme flüssig auszuführen. Bereiche, in denen Skriptsprachen wie Perl nicht sinnvoll eingesetzt werden können, sind zum einen Anwendungen mit hohen Anforderungen an Hardware-Nähe oder Geschwindigkeit wie zum Beispiel Treiber oder Codecs. Zum anderen sollten sie nicht in stark sicherheitskritischen Bereichen (z. B. Flugzeugsteuerung) Verwendung finden, da aufgrund der laxen Syntaxprüfung (z. B. fehlendes/sehr schwaches Typsystem) viele Fehler erst zur Laufzeit auftreten und eine Verifizierung im Allgemeinen nicht möglich ist. Perl-Portierungen existierten für über 100 Betriebssysteme.[11] Perl und andere ProgrammiersprachenFür Aufgaben, die mit Perl nur schwierig oder langsam lösbar sind, bietet Perl mit dem Modul Inline[12] eine Schnittstelle an, über die Programmteile in anderen Sprachen in ein Perl-Programm eingebunden werden können. Unterstützte Sprachen sind u. a. C, C++, Assembler, Java, Python, Ruby, Fortran und Octave.[13] Anwendungsgebiete sind z. B.:
Die Anwendung von Inline ist relativ einfach und gut dokumentiert. Bei kompilierten Programmteilen führt Inline mittels MD5-Kennung Buch über den Versionsstand, wodurch Mehrfachkompilierung des gleichen Codes vermieden wird. Bei Inline erfordert die Übergabe der Parameter und Rückgabe der Ergebnisse einigen Aufwand. Bei kurzen Berechnungen überwiegt dieser Aufwand den Gewinn an Geschwindigkeit. Wird zum Beispiel die Mandelbrot-Menge berechnet, indem die Formel über Inline als C-Funktion berechnet, die Iteration aber in Perl belassen, verlangsamt sich die Programmausführung gegenüber einer reinen Perl-Implementierung. Wird hingegen auch die Iterationsschleife in C ausgelagert, steigert sich die Performance signifikant. Logos![]() Als Maskottchen von Perl dient ein Dromedar. Es zierte erstmals den Umschlag des auch als Kamelbuch bekannten Referenzwerkes Programming Perl. Sein Verleger (Tim O’Reilly) sagte in einem Interview 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 ActivePerl von ActiveState schmückt. SyntaxFreies FormatPerl erlaubt bedingt formatfreien Quellcode. Das bedeutet, dass Einrückungen und zusätzliche Leerzeichen syntaktisch unerheblich sind und auch Zeilenumbrüche nach Belieben eingefügt werden können. Dafür müssen Befehle eines Blocks mit Semikolon getrennt werden. Einige Sprachelemente wie Formate, heredocs und gewöhnliche reguläre Ausdrücke sind nicht formatfrei. VariablenCharakteristisch für Perl ist, dass Variablen durch ein Präfix (auch Sigil genannt) gekennzeichnet werden, das ihren Datentyp anzeigt. Hier einige Beispiele:
Datei-Handles, Verzeichnis-Handles und Formate besitzen kein Präfix, sind aber ebenfalls eigenständige Datentypen. Jeder Datentyp hat in Perl seinen eigenen Namensraum. Basisdatentypen in Perl sind skalare Variablen, Arrays und Hashes (assoziative Arrays).
Hashes und Arrays lassen sich einander zuweisen, wobei Hashes als Listen von Key/Value-Paaren betrachtet werden. Daten verschiedenen Typs lassen sich mittels Referenzen beliebig zu neuen Datenstrukturen kombinieren, beispielsweise sind Hashes denkbar, die neben (Referenzen auf) Arrays auch einzelne Skalare enthalten. Package-Variablen werden automatisch erstellt, sobald sie das erste Mal verwendet werden. Weitaus häufiger im modernen Sprachgebrauch kommen gültigkeitsbeschränkte Variablen zum Einsatz. Diese müssen mittels KontrollstrukturenDie grundlegenden Kontrollstrukturen unterscheiden sich kaum von denen in C, Java und JavaScript. Bedingte Ausführung
if (<Bedingung>) {<Anweisungen>}
[elsif (<Bedingung>) {<Anweisungen>}]
[else {<Anweisungen>}]
unless (<Bedingung>) {<Anweisungen>}
[else {<Anweisungen>}]
given (<variable>) {
[when (<Wert>) {<Anweisungen>}]
[default {<Anweisungen>}]
}
<Bedingung> ? <Anweisung1> : <Anweisung2>;
<Ausdruck1> || <Ausdruck2>;
<Ausdruck1> && <Ausdruck2>;
SchleifenWie in C iterieren [label:] while (<Bedingung>)
{<Anweisungen>} [continue {<Anweisungen>}]
[label:] until (<Bedingung>)
{<Anweisungen>} [continue {<Anweisungen>}]
[label:] for ([<Startanweisung>]; [<Bedingung>]; [<Updateanweisung>])
{<Anweisungen>} [continue {<Anweisungen>}]
[label:] for[each] [[my] $element] (<Liste>)
{<Anweisungen>} [continue {<Anweisungen>}]
do {<Anweisungen>} while <Bedingung>; # Spezialfall: in dieser Form
do {<Anweisungen>} until <Bedingung>; # mindestens eine Ausführung
Nachgestellte KontrollstrukturenDie oberhalb aufgezählten Kontrollstrukturen beziehen sich auf einen Block mit mehreren Anweisungen. Bei einzelnen Anweisungen kann man auch die verkürzte, nachgestellte Schreibweise wählen, die auch den (englischsprachigen) Lesern das Verständnis durch natürlichsprachige Formulierung erleichtert. <Anweisung> if <Bedingung>;
<Anweisung> unless <Bedingung>;
<Anweisung> for <Liste>;
<Anweisung> while <Bedingung>;
<Anweisung> until <Bedingung>;
Reguläre AusdrückeSeit seinen Anfängen waren reguläre Ausdrücke (Regex) ein besonderes Merkmal von Perl, da ähnliche Fähigkeiten bis dahin meist nur spezialisierte Sprachen wie Snobol und awk hatten. Durch die große Verbreitung setzte Perl einen inoffiziellen Standard, der durch die von Perl unabhängige und auch teilweise abweichende Bibliothek PCRE aufgegriffen wurde, die heute von mehreren bedeutenden Sprachen und Projekten verwendet wird. Ab Version 5.0 hat Perl seine Regex-Fähigkeiten um viele Funktionen, wie z. B. Rückwärtsreferenzen, erweitert. Auch lassen sich reguläre Ausdrücke in Perl wesentlich direkter – als z. B. in Java – mit dem Perl kennt zwei Befehle für reguläre Ausdrücke, deren Verhalten mit vielen nachgestellten Optionen verändert werden kann.
$var =~ [m]/<Suchausdruck>/[g[c]][i][m][o][s][x];
$var =~ s/<Suchausdruck>/<Ersatzausdruck>/[e][g][i][m][o][s][x];
Nach erfolgreicher Verwendung eines regulären Ausdruckes stehen folgende Sondervariablen zur Verfügung:
Der oft in einem Atemzug mit $var =~ tr/<Suchzeichen>/<Ersatzzeichen>/[c][d][s];
Neben diesen beiden kann auch der Befehl Quoting und InterpolationQuoting-Operatoren:
Alternatives Quoting und Variableninterpolation führen zu besonders gut lesbarem Code. Ein Beispiel zur Verdeutlichung:
$text = 'He\'s my friend ' . $name . ' from ' . $town . '.'
. ' ' . $name . ' has worked in company "' . $company . '" for ' . $years . ' years.';
$text = "He's my friend $name from $town. $name has worked in company \"$company\" for $years years.";
$text = qq{He's my friend $name from $town. $name has worked in company "$company" for $years years.};
KritikHäufigster Kritikpunkt an Perl ist, dass darin geschriebene Programme schlecht lesbar seien. Zudem bietet Perl überdurchschnittlich viele Freiheiten, die zu unleserlichem Code führen können (siehe Disziplinen). Andererseits ermöglicht die gleiche Freiheit es auch, nahe an der logischen Struktur des Problems oder dem menschlichen Verständnis zu programmieren. Die von Perl-Programmierern geschätzte Freiheit, persönlichen Vorlieben nachzugehen, muss bei Projekten, die von mehreren Programmierern oder über längere Zeiträume entwickelt werden, durch selbst auferlegte Regeln eingeschränkt werden, um spätere Probleme zu vermeiden. Dies erfordert zusätzlichen Kommunikationsaufwand oder die Verwendung von statischen Code-Analyse-Tools wie Perl::Critic. Einige Teile der Syntax, wie der Ausdruck der Objektorientierung und Signaturen, sind zwar einfach und sehr mächtig, werden aber häufig gegenüber vergleichbaren Sprachen wie Python oder Ruby als veraltet wahrgenommen und fordern bei standardisierten Herangehensweisen besonders von Perl-Anfängern zusätzliche Tipp- und Denkarbeit. Mit zusätzlichen Modulen lassen sich viele der Schwierigkeiten minimieren. So gibt es mit English ein Core-Modul, das den Spezialvariablen aussagekräftigere Namen gibt und mit Moose ein sehr modernes und umfangreiches Objektsystem, das sich stark an das von Raku anlehnt. Es gilt heute als De-facto-Standard für objektorientierte Programmierung mit Perl.[14] Signaturen wurden mit 5.20 eingeführt, sind aber immer noch als experimentell eingestuft. Weiterhin wurde Perl vorgeworfen, es verletze die UNIX-Philosophie. Siehe dazu den Abschnitt Entstehung. Kritik wurde auch gegen Raku erhoben, das zu hoch gesteckte Ziele habe und nach vielen Jahren keine sichtbaren Ergebnisse bringe, stattdessen die Zukunft von Perl lähme. Raku war von Anfang an als Langzeitprojekt ausgerufen, das ausschließlich auf nicht immer planbarer Freiwilligenarbeit und kaum finanzieller Unterstützung beruht. Seine konkreten Ziele zeichneten sich erst im Verlauf der Entwicklung ab, und es gab eindeutige Probleme bei der Kommunikation und der Außendarstellung. Allerdings stammen seit Perl 5.10 wesentliche Neuerungen aus der Schwestersprache. Perl-Kultur und SpaßGemeinschaft![]() Wie auch bei anderen Projekten freier Software gibt es zwischen vielen Entwicklern und Benutzern der Sprache besondere soziale Bindungen, und es bildete sich eine eigene Kultur daraus. Die Perl-Kultur ist von Offenheit, Gastlichkeit und Hilfsbereitschaft, aber auch von Individualismus, Spieltrieb und Humor geprägt. Anfangs war sicher Larry Wall hierfür ein Vorbild, da er durch andere Projekte wie rn oder patch bereits bei der Veröffentlichung von Perl eine prominente Position in UNIX-Entwicklerkreisen hatte, doch mittlerweile zählen auch Randal L. Schwartz, Damian Conway, Audrey Tang, Brian Ingerson und Adam Kennedy zu den Leitfiguren, die durch ihre Arbeiten innerhalb der „Szene“ große Beachtung finden. Im Gegensatz zu kommerziellen Programmiersprachen lassen sich fast alle Aktivitäten auf persönliche Motivationen zurückführen. Dementsprechend ist die Perl Foundation eine reine Freiwilligen-Organisation, die sich als Angelpunkt einer sich selbst verwaltenden Gemeinschaft versteht und die gespendeten Gelder für einflussreiche Projekte und Personen, Organisation von Entwicklerkonferenzen und den Betrieb der wichtigsten Perl betreffenden Webseiten verwendet. Treffen, Workshops und KonferenzenLokale Benutzergruppen, die meist ein- oder zweimal im Monat zu zwanglosen Treffen einladen, bei denen auch Vorträge gehalten werden können, nennen sich Perl Mongers und sind in über 200 größeren Städten auf der ganzen Welt zu finden. Größer, wesentlich straffer organisiert und meist landesbezogen sind die jährlichen Workshops, von denen der gut etablierte Deutsche Perl-Workshop[15] der erste war. Workshops wollen ambitionierte Entwickler in einem möglichst erschwinglichen Rahmen lokal zusammenführen. Ein ähnliches Ziel haben die größeren Yet Another Perl Conferences (YAPC), die für die Regionen Nordamerika, Brasilien, Europa, Asien, Russland und Israel abgehalten werden. Am größten, allerdings auch am teuersten ist die von O’Reilly in den USA ausgerichtete The Perl Conference (TPC), die mittlerweile Teil der OSCON ist. Seit etwa 2005 werden für engagierte Beitragende auch Hackathons abgehalten. DisziplinenViele 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.
@P=split//,".URRUU\c8R";@d=split//,"\nrekcah xinU / lreP rehtona tsuJ";sub p{ @p{"r$p","u$p"}=(P,P);pipe"r$p","u$p";++$p;($q*=2)+=$f=!fork;map{$P=$P[$f^ord ($p{$_})&6];$p{$_}=/ ^$P/ix?$P:close$_}keys%p}p;p;p;p;p;map{$p{$_}=~/^[P.]/&& close$_}%p;wait until$?;map{/^r/&&<$_>}%p;$_=$d[$q];sleep rand(2)if/\S/;print ![]()
insertum stringo unum tum duo excerpemento da. # Entspricht: substr($string,1,2) = $insert; clavis hashus nominamentum da. # Entspricht: @keys = keys %hash;
Mottos und ZitateEs gibt viele bekannte Mottos und Zitate, die sich mit Perl selbst oder den Möglichkeiten der Sprache beschäftigen; hier einige Kostproben:
AuszeichnungenWettbewerbe
Literatur
WeblinksWikibooks: Perl-Programmierung – Lern- und Lehrmaterialien
Commons: Perl (Programmiersprache) – Sammlung von Bildern, Videos und Audiodateien
Einzelnachweise
|
Portal di Ensiklopedia Dunia