Zum Inhalt springen

Perl (Programmiersprache)

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 20. September 2003 um 23:19 Uhr durch 217.235.100.29 (Diskussion). Sie kann sich erheblich von der aktuellen Version unterscheiden.


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. Wie in jeder Programmiersprache hängt die Lesbarkeit aber vor allem von Stil, Disziplin und Erfahrung des Programmierers ab.

Perl wurde ursprünglich von Larry Wall entworfen, der es 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. 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 natürlich besonders leichten Zugang. Insgesamt ist Perls Lernkurve nach Überwindung einer ersten Hürde flach, man kommt also sehr schnell zu Erfolgserlebnissen. Gleichzeitig ist die Sprache extrem mächtig und bietet so auch für sehr komplexe Probleme raffinierte Lösungen.

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 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. Ein gern zitiertes Motto besagt, daß leichte Dinge einfach und komplexe Dinge möglich sind.

Neben einer unkomplizierten Verwendung von Variablen (Typ"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. Mit Version 5 wurde es um die Möglichkeit objektorientierter Programmierung erweitert, die sich gut in das Konzept der Sprache einpassen.

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 daß 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.

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

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 Listen oder Hash-Datenstrukturen. ) Referenzen als Spezialfälle skalarer Variablen erlauben so die Konstruktion beliebig komplexer Datenstrukturen. Auch /Objekte/ werden über Referenzen verwaltet.

Speziell für Perl ist, dass Datentypen durch ein Prefix angezeigt werden, beispielsweise

$ für Skalar,
@ für Arrays,
% für Hash,
& für Funktion.

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 Value zugeordnet ist. Hashes und Arrays lassen sich aneinander zuweisen.

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

  • 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

Konferenzen

The Perl Conference ist ein großes, von O'Reilly ausgerichtetes, aber leider auch teures Treffen in Amerika. YAPC's versuchen, Entwickler in einem möglichst erschwinglichen Rahmen lokal zusammenzuführen und haben inzwischen beispielsweise in Amerika, Europa und Israel Tradition. Der Deutsche Perlworkshop als Treffen für den deutschsprachigen Raum etablierte sich bereits vor den YAPC's mit ähnlichen Zielen und findet in Zusammenarbeit mit ihnen jährlich statt.