Perl

veröffentlicht von gngn am Sa., 29.09.2018 - 00:46
print "Hello World!\n";

In den Worten seines Erfinders Larry Wall: Perl ermutigt dich,

die drei großen Tugenden eines Programmierers zu entwickeln: Faulheit, Ungeduld und Überheblichkeit1

und ist nicht nur eine Skript-Sprache und nicht nur Gaffer fürs Internet, sondern eine der schönsten Programmiersprachen überhaupt (werden in deiner Lieblingssprache Gedichte geschrieben?)

Ursprünglich entwickelt von Larry Wall, der gemäß dem Motto

Eine Programmierer ist jemand, der zum Lösen einer Aufgabe lieber 2 Stunden lang ein Programm schreibt als 1 Stunde lang eine monotone Arbeit auszuführen2

vor der Aufgabe stand Text bearbeiten3. Anstatt das langweilig per Hand zu machen oder doch sehr krude Tools wie sed oder awk zu nutzen4, erfand er lieber eine eigene Sprache : Perl - "Practical Extraction and Reporting Language"5.

Das Perl Kamel
Das Perl Kamel (Quelle: https://en.wikipedia.org/wiki/File:Perl-camel-small.png)

Stärke sollte sein (und ist es!), Text zu bearbeiten - und beim Programmieren geht es sehr viel um die eine oder andere Form von Text.
Grunsätze von Perl sind:

  • Programmierende sind faul (sollten also nix unnötiges machen müssen)
  • Einfache Dinge sollten einfach umzusetzen sein
  • Komplizierte Dinge sollten auch umzusetzen sein
  • "There is More Than One Way to Do it"

Nach Meinung vieler Fans (auch meiner) sind a) diese Grundsätze sehr sinnvoll und b) ist die Umsetzung vollauf gelungen.

Zufällig kam kurze Zeit später das Internet schwer in Mode. Lange Zeit ging es dabei vor allem um Text, der auf verschiedene Art & Weise bearbeitet, durchsucht, kombiniert, versendet und sonst wie durch den Wolf gedreht werden muss - so dass Perl zur Sprache wurde, die das Netz zusammenhält.6

Viele große Websites waren und sind Perl-basiert, z.B.:

  • IMDB: die Internet Movie Database verwaltet 3,7 Millionen Titel und 7 Millionen Personen - mit Perl
  • Amazon: angefangen als reiner Perl-Shop basiert es jetzt auf einer Kombi aus u.a. Java, Servlets, C++ und eben Perl
  • BBC: bbc.com nutzt Perl (ebenso der BBC iPlayer)
  • Booking.com: eine der größten Online-Reservierungs-Plattformen beschäftigt Massen an Perl-Programmierenden
  • Duckduckgo: Diese Suchmaschine ist nicht Google aber dafür schätzen sie deine Privatsphäre - und nutzen Perl (ihre gesamte Software ist Open Source)
  • Heise: zumindest bis vor nicht allzu langer Zeit war heise.de komplett Perl-basiert

Auch wenn diese gute alte Zeit vorbei ist, hat Perl nach wie vor seine Stärken:

  • einfacher, einheitlicher und übersichtlicher Grundentwurf
    (nicht wie in PHP wo die Funktionen get_class() und gettype() heißen, die Parameter-Reihenfolge zwischen strpos($haystack, $needle) und array_search($needle, $haystack) springt, eine Funktion htmlentities() heißt und ihre Umkehr-Funktion html_entity_decode(), usw.
  • vorbildliche Modul-Bibliothek: das Comprehensive Perl Archive network (CPAN) ist online seit 1995 und bietet 176,286 Module von 13,593 Autoren gespiegelt auf 262 Servern (stand 2018-09) - und das in ausgesuchter hoher Qualität.
  • Da wir von Text reden: reguläre Ausdrücke (eine wunderbare Sache um nach Mustern o.ä. innerhalb von Text zu suchen) sind fest in Perl eingebaut (und unfassbar performant!)
  • Wie erwähnt: komplizierte Dinge sind möglich: Perl bietet komplette Objektorientiertheit und Vererbung (wenn auch nicht mit der schönsten aller OO-Syntaxen)
  • ... und Perl ist meines Wissens die einzige Programmier-Sprache in der Gedichte geschrieben werden: Perl poems
    study, write, study,
    do review (each %word) if time.
    close book. sleep? what's that?
    Article 970 of comp.lang.perl

Der Versuch Perl als Perl 6 grundsätzlich neu zu erfinden (bis einschliesslich Perl 5 bauten die Versionen stark aufeinander auf; Perl 6 ist ein kompletter Neu-Anfang) konnte sich bis heute nicht wirklich durchsetzen.

 


 

P.S. So viel Lob - aber es gibt durchaus auch andere Meinungen.

Yes, sometimes Perl looks like line noise to the uninitiated, but to the seasoned Perl programmer, it looks like checksummed line noise with a mission in life.

--  Randal L. Schwartz, Lerning Perl. O'Reilly & Associates

Der Ansatz "Einfaches sollte einfach sein" (nicht unbedingt dasselbe wie "einfach zu verstehen") und Faulheit als Tugend anzusehen, kann so weit auf die Spitze getrieben werden, dass ein Perl-Prgramm so kurz und knapp formuliert wird, dass auch Profis nur schwer oder gar nicht durchblicken.

Auf die Spitze der Spitze getrieben heißt das Obfuscated Perl Contest7, wo gefragt wird nach:

"devious, inhuman, disgusting, amusing, amazing, and bizarre Perl code"

Das folgende Beispiel generiert die Ausgabe "The Perl Journal" (eine beliebte Kategorie bei dem vom Perl Journal veranstalteten Wettbewerb):

#:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :||
open(Q,$0);while(<Q>){if(/^#(.*)$/){for(split('-',$1)){$q=0;for(split){s/\|
/:.:/xg;s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;}print chr($q);}}}print"\n";
#.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|

Nein, ich verstehe es nicht. In den Worten des Preis-Komitees:

there's always someone who tries something totally beyond any understanding. That someone was Les Peters, who used a rendition of rotated 90 degree Mayan numerals to extract the required text. Yes, indeed. For this effort above and beyond the tethers of sanity,

-- Quelle: https://www.foo.be/docs/tpj/issues/vol5_3/tpj0503-0014.html

Ausführlichere Kritik:

 

  • 1. "We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris." -- LarryWall, ProgrammingPerl (1st edition)
  • 2. Das ist von mir
  • 3. Meint hier (und beim Programmieren meistens) nicht Text zu schreiben sondern vorhandenen Text zu durchsuchen, Teile zu ersetzen, ...
  • 4. Larry Wall über "sed": "Randal said it would be tough to do in sed. He didn't say he didn't understand sed. Randal understands sed quite well. Which is why he uses Perl." (gemeint ist Randal L. Schwartz, einer der Mit- und Weiterentwickler von Perl)
  • 5. Das ist ein offizielles Akronym. Böse Zungen reden von "Pathologically Eclectic Rubbish Lister", aber die können eben keine regulären Ausdrücke lesen.
  • 6. Eine "Klebe-Sprache" (glue language) erlaubt es dir, verschiedene unterschiedliche und inkompatible (Software-)Komponenten, die in völlig verschiedenen Sprachen geschrieben sind und von sich aus keine Möglichkeit bieten miteinander zu "reden" (also Informationen und/oder Anweisungen auszutauschen, doch miteinander zu verbinden. Solche Aufgaben erfüllt Perl auch in praktisch allen Linux-Distributionen.
  • 7. Vorbild ist der International Obfuscated C Code Contest (https://www.ioccc.org/)
Meta
Jahr
1987
Ort
Vorläufer-Sprachen
Nachkommen-Sprachen
Quelle

Neuen Kommentar hinzufügen

Eingeschränktes HTML

  • Erlaubte HTML-Tags: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Zeilenumbrüche und Absätze werden automatisch erzeugt.
  • Website- und E-Mail-Adressen werden automatisch in Links umgewandelt.