Perl-Programmierung/ Druckversion

Aus Wikibooks

Wechseln zu: Navigation, Suche


Druckversion des Buches Perl-Programmierung.
  • Dieses Buch umfasst derzeit etwa 80 DIN-A4-Seiten einschließlich Bilder (Stand: Juli 2007).
  • Wenn Sie dieses Buch drucken oder die Druckvorschau Ihres Browsers verwenden, ist diese Notiz nicht sichtbar.
  • Zum Drucken klicken Sie in der linken Menüleiste im Abschnitt „Werkzeuge“ auf Druckversion.
  • Mehr Informationen über Druckversionen siehe Wikibooks:Druckausgaben.
  • Hinweise:
    • Für einen reinen Text-Ausdruck kann man die Bilder-Darstellung im Browser deaktivieren.
    • Texte, die in Klappboxen stehen, werden nicht mit ausgedruckt.


Internet-Explorer: Extras > Internetoptionen > Erweitert > Bilder anzeigen (Häkchen entfernen und mit OK bestätigen),
Mozilla Firefox: Extras > Einstellungen > Inhalt > Grafiken laden (Häkchen entfernen und mit OK bestätigen),
Opera: Ansicht > Bilder > Keine Bilder.


Vorwort

Tja das Vorwort wird geschrieben wenn das Buch fertig ist.....



Inhaltsverzeichnis


Die Projektdefinition dieses Wikibuchs

Zusammenfassung des Projekts

Zielgruppe

Neueinsteiger sollen hier einen einfachen Einstieg in die Programmiersprache Perl finden. Fachleute haben andere Quellen als Nachschlagewerk (z.B. Perldoc, CPAN, Perlwiki, etc.)


Lernziele

Dieser Kurs ist dafür geschrieben, die ganze Welt der Perl-Programmierung in Theorie und Praxis vorzustellen.

Ein Motto von Perl lautet: "There is more than one way to do it". Nach der Lektüre sollte der Leser für jede denkbare Teilaufgabe mindestens einen Weg kennen, sie durchzuführen.


Buchpatenschaft / Ansprechperson

- Verantwortliche Autoren: -- Noch niemand

- Co-Autoren:

Sind Co-Autoren gegenwärtig erwünscht?

Das Projekt ist bereits fortgeschritten, und verfügt bereits über Co-Autoren. Weitere lassen sich problemlos einfügen, und sind ausdrücklich erwünscht. Auf der Diskussionsseite wird eine Todo-Liste eingerichtet, so daß diese auch sofort loslegen können.


Richtlinien für Co-Autoren:

Da es in Perl durch seine Möglichkeiten der Syntaxgestaltung sehr leicht möglich ist, extrem unleserlichen Code zu produzieren, sollte eine gewisse Einheitlichkeit an den Tag gelegt werden, um es dem Leser einfacher zu machen, den Quelltext zu verstehen. Dies gilt für die Art der Klammerung, Variablendeklarationen, usw. Viele dieser Richtlinien stammen aus dem Buch "Perl Best Practices" von Damian Conway und gelten als Standards für guten Perl-Code. Natürlich steht es jedem frei, sich diese Regeln anzueignen, aber wenigstens im Laufe dieses Buches sollten sie verwendet werden.

Klammerung

Die Richtlinie zur Klammerung innerhalb des Buches ist der K&R-Stil. Er hat gegenüber anderen Klammerungsstilen den Vorteil, dass er eine Zeile spart, dabei die Lesbarkeit der Schleife oder Anweisung jedoch nicht beeinträchtigt.

Beispiel ( K&R-Stil ):

for (1 .. 10) {
    print $_, "\n";
}

Im Gegensatz zu diesem Beispiel, hier ein Beispiel mit dem BSD-Stil:

Beispiel ( BSD-Stil ):

for (1 .. 10)
{
    print $_, "\n";
}

Zwar ist der Code hier mindestens gleich gut zu lesen, aber er braucht eben eine Zeile mehr. Und Zeilen sind kostbar. :) Diese Richtlinie gilt auch bei der Deklaration von Listen und Hashes.

Beispiel-Deklaration ( K&R-Stil ):

my @list = (
    'blubb',
    'blibb',
    'blebb'
);
 
my %hash = (
    'id1'  =>  'name1',
    'id2'  =>  'name2',
    'id3'  =>  'name3',
    'id4'  =>  'name4'
);

Bei kurzen Listen ist dies natürlich nicht erforderlich, aber sobald eine Liste die kritische Masse erreicht hat, in der sie nicht mehr in eine Zeile passt ( > 80 Zeichen ) sollte sie in der oben angeführten Form geschrieben werden um es dem Leser verständlicher zu machen.

Einrückungen

Generell sollte für jede Stufe eine Einrückung von 4 Leerzeichen verwendet werden. Das ist der Kompromiss zwischen den 8 und den 2 Leerzeichen, die sonst oft Anwendungen finden. Damit hat man genug Übersicht um sich zurechtzufinden und muss trotzdem kein Augentennis spielen wenn man zwischen den Zeilen herumspringt.

Beispiel:

if (1 == 1) {
    print "1 ist 1", "\n";
}

Operatoren und Zuweisungen

Um eine Zuweisung übersichtlich zu halten, ist es zu begrüßen, wenn sie den Elementen der Zuweisung ein wenig Platz lassen. So ist folgende Zuweisung

my $var=(1+3/5)*(6-3);

erheblich schwerer zu lesen als

my $var = (1 + 3 / 5) * (6 - 3);

Zwar benötigt man so mehr Platz, aber um die Übersichtlichkeit zu gewähren, ist das ein verschmerzliches Übel.

use strict; use warnings;

Dieses Buch richtet sich an Anfänger. Gerade diesen sollte man zeigen, wie man gefährliches Perl vermeidet. Dazu zählt der Einsatz von Warnungen und 'strictures'.

Die beiden Pragmas use strict; und use warnings; sollten am Anfang eines jeden Beispiels stehen, das eigenständig lauffähig ist. Bei nicht eigenständigen Code-Fragmenten sind sie nicht unbedingt nötig, aber diese sollten durch Verwendung von "..." oder explizit durch Perl-Kommentare als unvollständig gekennzeichnet werden. Darüber hinaus sollten Code-Fragmente nur selten verwendet werden, der Schwerpunkt sollte auf vollständigen Programmen liegen.

perl -w ist antik und soll vermieden werden, s. perllexwarn, What's wrong with -w and $^W

Formatierungen

  • Bei Codestücken, die code-zeilen-nummerierung mitnehmen, da es dann leichter wird sich zurechzufinden, wenn man sich auf etwas bezieht ( nur wenns längere beispiele sind, bei einzeilern ist das sinnfrei ;) )
  • Falls im Text Funktionen/Schlüsselwörter angesprochen werden, diese so herauszuheben: <code>while</code> -> while um sie leichter erkennbar zu machen
  • Variablen, die im Beispiel vorkommen und im Text erläutert werden fett zu halten: '''$testvar''' -> $testvar
  • Im Text erwähnte CPAN-Module bitte als Links auf die CPAN Seite formatieren.

Projektumfang und Abgrenzung zu anderen Wikibooks

Themenbeschreibung

Aufbau und Bearbeitungsstatus des Buches

Für Neugierige hier zuerst ein kurzer Überblick über den Aufbau. Er ist auch für Praktiker und Fortgeschrittene nützlich, damit sie erfahren, welche Kapitel sie überspringen können.

Die ersten Kapitel behandeln Perl theoretisch. Mit wichtigen Grundinformationen beginnend wird es immer spezifischer und zum Ende hin auch ein wenig philosophisch, so dass jeder für sich entscheiden kann, wann er sich bereit für die Praxis fühlt und den Rest dieses Kapitels überspringen möchte.

Der zweite Abschnitt ist der Grundkurs, in dem es um Variablen, Funktionen, Schleifen und etwas Spielerei mit Dateien und Texten geht.

Formales 00% fertig

Vorwort 00% fertig

Einführung 00% fertig

Kurzvorstellung 00% fertig
Das Richtige für mich? 00% fertig
Eintauchen in die Perlenwelt 00% fertig
Geschichte einer Skriptsprache 00% fertig
Larry und die Perl-Kultur 00% fertig

Der Einstieg 00% fertig

„Hello World!“ 00% fertig
Variablen 00% fertig
Variablenklassifizierung und Fallbeispiele 00% fertig
Spezialvariablen 00% fertig
Einfache Ein-/Ausgabe 00% fertig
Dateien 00% fertig
Operatoren 00% fertig
Kontrollstrukturen 00% fertig
Subroutinen 00% fertig

Fortgeschrittene Themen 00% fertig

Programmierstil und -struktur 00% fertig
Gültigkeitsbereich von Variablen 10% fertig
Reguläre Ausdrücke 30% fertig
Objektorientiert Programmieren in Perl 00% fertig
Vordefinierte Variablen 00% fertig

Perl-Schnittstellen 00% fertig

GUI in Perl 00% fertig
Perl/TK 00% fertig
Perl/QT 00% fertig
Perl/GTK 00% fertig
Perl/wxWidgets 00% fertig
Web-Entwicklung in Perl 00% fertig
CGI 00% fertig
mod_perl: Perl-Beschleunigung unter Apache 00% fertig
DBI: Datenbankzugriffe in Perl 00% fertig
Benutzen der CPAN-Bibliotheken 00% fertig

Beispiele

Einfache Beispiele für den Einstieg 00% fertig

Anhänge 00% fertig

Funktionsreferenz 00% fertig
Nützliche Module 00% fertig
Schnellreferenz 00% fertig
Webseiten und mehr 00% fertig
Buchtipps 00% fertig
Glossar 00% fertig
Installation 00% fertig

Wikibooks.org

Perl-Programmierung/ Druckversion 00% fertig



Liste der verwendeten Vorlagen: Perl-Programmierung: Vorlagen



Das Wikibuch: Perl Programmierung

Kurzvorstellung

Perl ist eine von Larry Wall entwickelte Programmiersprache, die erstmals (Version 1.0) am 18. Dezember 1987 über den damaligen Vorläufer des Internets veröffentlicht wurde. Larry Wall entwickelte Perl damals, um sich seine Arbeit als Betreuer eines USA-weit verstreuten Computernetzes zu erleichtern. Er verband dabei Ausdrucksweisen und Fähigkeiten von Programmiersprachen wie C, BASIC, Pascal und Ada und verwendete auch bekannte UNIX-Werkzeuge wie sed, awk, shell und grep als Vorlage für Perl-Befehle. Dabei orientierte er sich weder am Ideal optischer Schönheit und Eindeutigkeit, wie es die verwandte Sprache Python tut, noch an strenger Logik und Einfachheit wie beispielsweise LISP, sondern am Reichtum menschlicher Lese- und Denkgewohnheiten. Laut Larry Wall wurde Perl dafür entworfen, um möglichst frei, individuell und schnell die eigenen Ideen umsetzen zu können. Ein Perl-Programm ist auch so wie es geschrieben wurde sofort startbereit, benötigt aber einen Interpreter, um ausgeführt zu werden. Dieser Perl-Interpreter ist für jedes gängige Betriebssystem frei erhältlich und wird weiterhin vom Erfinder und vielen Freiwilligen gepflegt und weiterentwickelt.

Besonderheiten des Sprachkonzepts von Perl

Sprachen wurden von Menschen zum Nutzen von Menschen eingeführt. Da Perl von einem (sozusagen) Gelegenheitslinguisten entworfen wurde, orientiert sich die Sprache sehr nahe an der natürlichen Sprache. Selbstverständlich gibt es hierfür verschiedenste Betrachtungswinkel. Dies zu erläutern wäre zu kompliziert, deshalb sei gesagt, dass bei Perl einfache Dinge auch einfach bleiben sollen und kompliziertes immer noch möglich sein sollte. Diese Forderung, die wir an diese Sprache stellen, ist klar und eindeutig. Allerdings scheitern genau an diesen Punkten sehr viele andere Programmiersprachen, Perl nicht.

Natürliche Sprachen ändern sich stetig. Dies liegt einerseits daran, dass wir Menschen lebendig sind und nicht wollen, dass uns etwas diktiert oder absolut aufgezwungen wird, andererseits daran, dass Menschen schon immer kreativ und einfallsreich waren. Perl wurde nun extra so entwickelt, dass es wachsen kann, und somit der "Wortschatz" nicht immer auf dem gleichen Stand bleibt. Und ja, es ist gewachsen. Das Kamel (Logo von Perl) ist und bleibt eigenständig und absolut durchsetzungsfähig. Zudem sagt man, dass ein Kamel nicht gerade gut riecht; Perl wurde auch nie so entwickelt, dass es "gut riecht".

Perl ist sogar einigermaßen intelligent; es hört zu und versucht zu begreifen, was Sie machen wollen. Ein Beispiel: Wenn ich das Wort "dog" sage, dann hören Sie es als ein Substantiv. Ich kann das Wort aber auch auf andere Weise verwenden. Das heißt, ein Substantiv kann auch als Verb oder Adjektiv oder Adverb fungieren, wenn es der Zusammenhang verlangt. Perl beurteilt Wörter auch aus dem Kontext heraus. Wie es das macht, werden Sie später noch feststellen können. (Wenn Sie nicht gerade Unsinn reden, wird Perl auch etwas tun, und wenn das was Sie sagen auch nur irgendwie verständlich ist, dann wird es Perl auch richtig tun). Die meisten Programiersprachen treffen Unterscheidungen dieser Art meist durch Deklaration von Variablen. Perl tut sich hier einfacher; ich brauche die Variablen nicht explizit deklarieren. Perl unterscheidet hier selbstständig.

Aber dennoch ist Perl eine künstliche Sprache. Sie hat einen bestimmten Wortschatz und eine bestimmte Syntax, die sich nicht mehr ändern wird. Außer dass hin und wieder mal etwas Neues dazukommen wird, wird sich hier nichts mehr ändern. Und die Sprache ist eindeutig; jeder auf der Welt, der Perl kann, kann auch einzelne Perl-Scripte begreifen und verstehen. Denn die Sprache wird in Indien genauso geschrieben wie in Deutschland oder Amerika.


Das Richtige für mich? - Stärken, Schwächen und Alternativen zu Perl

Die Wahl der Sprache

Damit während des ganzen Kurses Ihre Freude an Perl anhält und Sie ehrlich unsere Begeisterung für Perl teilen können, möchten wir Ihnen einige Empfehlungen nahelegen, wann Perl wirklich eine gute Wahl ist, oder ob Sie vielleicht besser eine andere Sprache lernen sollten. Orientieren Sie sich am besten an den fettgedruckten Wörtern, die Ihre Lage am besten umschreiben. Falls Sie sich sicher sind, können Sie dieses Kapitel auch gerne überspringen.

Nach Erfahrung der Benutzer

  • Anfänger Entgegen manchen Vorurteilen ist Perl für absolute Anfänger sehr zu empfehlen. Bereits ein einzelner Befehl ist schon ein lauffähiges Programm und ein erster Erfolg. Mit einigen wenigen Grundtechniken lässt sich viel erreichen, und der Benutzer kann selbst bestimmen, wann er welche fortgeschrittene Technik erlernt.
  • Enthusiast Wer in der Freizeit für den Eigenbedarf und den Spaß an der Sache programmiert, ist mit Perl gut beraten. Es führt schnell zu Ergebnissen. In fast allen Bereichen gibt es viele freie, fertige Module, und man kann sich in Perl nach eigenen Vorstellungen austoben wie in kaum einer anderen Sprache. Wer seine Fenster und Dialoge mit wenigen Klicks "zusammenschieben" möchte, kann das auch mit dem gut unterstützten TKinter und einer professionellen IDE wie Komodo. Eine populäre und sehr ausgereifte Alternative von Borland, die auf der Sprache Pascal basiert, ist auf diesem Gebiet Delphi und unter Linux Kylix. Auch hier findet man einfaches Arbeiten, freie Komponenten und viele Gleichgesinnte. Der Kern von Object Pascal wird aber leider schon längere Zeit nicht mehr weiterentwickelt.
  • Berufsprogrammierer Wer Geld verdienen will, sollte etwas wie C, C++, C#, Visual Basic und Java können. Auch wenn es zunehmend Perl-Jobs gibt, sind diese noch nicht so häufig und sind oft auf den Internetseiten-Bereich beschränkt. Doch es ist abzusehen, dass Perl, aber auch Python, TCL und Ruby, wegen seiner hohen Produktivität und der eingebauten Unabhängigkeit vom Betriebssystem mehr Möglichkeiten offen stehen werden.
  • Umsteiger Wer bereits Erfahrung mit einer Sprache wie C, Java, Basic, Pascal, oder den UNIX-Werkzeugen wie sed, awk, grep usw. hat, wird sich schnell in Perl einfinden, weil er nicht nur im gleichen Stil weiterschreiben kann, sondern auch zum großen Teil sogar die Schreibweisen der Befehle übernommen wurden.
  • Studenten Um seinen Horizont zu erweitern, neue und frische Ideen zu sammeln, ist Perl nicht die schlechteste Wahl. Es unterstützt die meisten der heute üblichen Programmierstile und besitzt viele eigenwillige Lösungen. Die neuesten Impulse kommen aber von Sprachen wie Haskell, Cecil, Dylan, Comega, Heron und Nice. Nicht jede dieser Sprachen ist rein experimentell, aber meist gibt es dort, im Gegensatz zu Perl, wenig unterstützende Infrastruktur an Programmierwerkzeugen, Bibliotheken und Internetforen.


Nach Anwendungsgebiet

  • Webdesigner Bei der Erstellung von größeren Internetseiten ist mittlerweile das Perl recht ähnliche PHP oder Microsofts Alternative ASP gebräuchlicher. Wenige Zeilen PHP lassen sich lesbarer in den HTML-Quellcode einbinden als Perl, andererseits bietet das wesentlich ältere Perl hier immer noch mehr Möglichkeiten für anspruchsvolle Programmierer. Zudem gibt es mittlerweile für Perl diverse Templating-Systeme, die das saubere Trennen von Programmier- und HTML-Code ermöglichen. Das mod_perl Modul des häufig verwendeten Apache-Webservers und das Active State plex modul im Microsoft IIS Server erlauben es, mit Perl anspruchsvolle und schnelle Webportale und sogar effiziente Vielrechner-Systeme zu erstellen.
  • Hardwaretüftler Wer Betriebssysteme, Treiber oder sonstige Software schreiben will, die direkt mit der Hardware kommuniziert oder einfach nur sehr schnell sein soll, benutzt am besten Assembler wie NASM, MASM, TASM oder hardwarenahe Hochsprachen wie C.
  • Applikationsentwickler Perl kann man auch in eigene Programme einbauen, um es dem Benutzer zu ermöglichen, mit Erweiterungen, sogenannten Plugins oder Extensions, Funktionen hinzuzufügen, an die man selbst nicht dachte. Dafür eignen sich aber auch andere Sprachen wie Tcl, Python oder als neuere und besonders sparsame Möglichkeit: Lua.
  • Bioinformatiker. Im Bereich der Bioinformatik ist Perl sogar so populär, dass eigens ein Buch für diesen Teilbereich geschrieben wurde. Beginning Perl for Bioinformatics: http://www.oreilly.com/catalog/begperlbio/
  • Administratoren Auf Unix-artigen Betriebssystemen ist Perl so weit verbreitet, dass es als Standard-Tool installiert ist. Durch die starke Unterstützung von regulären Ausdrücken eignet sich Perl ideal um Log-Dateien auszuwerten, und grafisch als Statistik oder als eMail zu versenden. Die Möglichkeit Daemons zu schreiben, Prozesse zu automatisieren, Programme zusammen zu führen, die hohe Anzahl der CPAN-Modulen, die Portierung auf fast jeder Architektur und Betriebssystem, und vor allem die bereits Vorhandene Installation von Perl machen es zum Idealen Tool eines Administrators. Einmal geschriebene Skripte können flexibel ohne Anpassung auf unterschiedlicher Hardware sowie Betriebssystemen verwendet werden.

Schlussbemerkung

Die Wahl der Programmiersprache hat natürlich auch immer etwas mit persönlichen Vorlieben und dem eigenen Charakter zu tun. Wer feststellt, dass Perl in der Sache gut ist, aber sich an einzelnen Regelungen stößt, könnte Ruby ausprobieren, das Perl in vielem sehr ähnlich ist, aber wesentlich strikter an der objektorientierten Programmierung ausgerichtet ist oder Python, das den Benutzer stärker zu Übersichtlichkeit und Eindeutigkeit anleitet. Wer sich bis jetzt nicht für eine Sprache entscheiden konnte, hat auch die Möglichkeit, das allgemeine Wiki-Buch über Programmieren zu lesen.


Eintauchen in die Perlenwelt

Nachdem nun auf Historie und das Perl-Umfeld, die Einordnung von Perl in die Informatik und Programmierung eingegangen wurde, sollen nochmals grundlegende Eigenschaften und Fähigkeiten stichwortartig aufgezählt und kurz in jeweils ein bis zwei Sätzen erklärt werden, bevor der eigentliche Perl-Kurs anfängt.

  • Alternative Ausdrucksmöglichkeiten
Es gibt alternative Ausdrucksmöglichkeiten gleicher Algorithmendarstellungen. Dadurch kann eine für den Entwickler geeignete leicht lesbare Form fallbasiert verwendet werden.
  • Objektorientierung
Gerade die in Perl implementierte, extrem flexible Objektorientierung und die Möglichkeit Variablen und Handler zu definieren, die einfache Möglichkeit Operatoren zu überladen usw. lassen einem sehr viele Freiheiten. Perl kann als eine objektorientierte Sprache eingesetzt werden.
  • funktionale Programmierung
In Perl sind Funktionen „Bürger erster Klasse“. Unter anderem bedeutet dies, dass Funktionen zur Laufzeit erzeugt und an andere Funktionen als Argumente übergeben werden können. Dies ermöglicht funktionale Programmierung – die Erstellung von Programmen, deren Ablauf nicht durch die Manipulation und Abfrage von Variablen gesteuert wird, sondern die durch Aufruf von Funktionen ihren Zweck erfüllen. Perl kann als eine funktionale Sprache eingesetzt werden.
  • Interpreter-Ähnlichkeit, Byte-Code-Interpreter und Compiler
Perl-Quelltexte können – ähnlich einer Interpreter-Sprache – direkt gestartet werden. Obwohl Perl die meisten der Bequemlichkeiten einer interpretierten Sprache hat, interpretiert es den Quellcode nicht streng Zeile um Zeile. Das gesamte Programm wird, wenn es aufgerufen wird, zuerst in Bytecode übersetzt (ziemlich ähnlich der Programmiersprache Java), optimiert und dann ausgeführt. Es ist möglich, die Übersetzung in Bytecode schon früher durchzuführen, um beim Programmstart Zeit zu sparen; der Interpreter wird aber immer noch benötigt, um diesen Bytecode auszuführen. Auch sind bereits Möglichkeiten geschaffen, die Perl-Quelltexte zu kompilieren, so dass direkt ausführbarer Binärcode vorliegt.

Perl ist freie Software und unter der Artistic License und der GNU General Public License erhältlich. Erhältlich für die meisten Betriebssysteme, wird Perl am häufigsten auf Unix- oder Unix-ähnlichen Systemen genutzt, während die Beliebtheit auf Microsoft Windows Systemen noch steigt. Perl hat auch heute viele Anwendungsgebiete. Ein Beispiel für die Nutzung von Perl: Die Wikipedia-Software war bis zum Januar 2001 selbst ein CGI-Skript, das in Perl geschrieben wurde. Ein weiteres Beispiel ist das bekannte Informationsportal Slashdot, welches mithilfe der Perl-basierten Slashcode-Software läuft. Im Web wird Perl oft zusammen mit dem Apache-Webserver und dessen Modul mod_perl genutzt.


Geschichte einer Skriptsprache

Ursprünglich waren Skripte Textdateien mit Befehlen, die man auch in die Kommandozeile (System-Shell) eingeben könnte. Diese Skripte ließen sich vergleichsweise schnell schreiben und es war damit möglich, Befehle des Betriebssystems mit Programmaufrufen zu kombinieren, um so komplexere Aufgaben dem Computer zu überlassen, ohne in langer Arbeit ein neues Programm zu schreiben. Die Kommandozeileninterpreter, die diese Skripte ausführten, hatten aber wesentlich geringere Fähigkeiten, Daten zwischenzuspeichern oder den Ablauf zu regeln als eine Programmiersprache wie C. Außerdem konnte man in Skripten die Daten nur wie durch ein Nadelöhr von einem Programm hinaus und zum nächsten Programm hinein leiten.

Larry Walls Reaktion auf diese Situation war, einen erweiterten Kommandozeileninterpreter zu schreiben, der nicht nur fast den gesamten Sprachschatz von C beherrscht, sondern auch viele der kleinen nützlichen Helferlein kopiert, besonders sed, awk und grep, die die Kommandozeile des Betriebssystems UNIX so mächtig machen. Damit lassen sich viel mächtigere Skripte schreiben, die Textdateien durchsuchen und die von anderen Programmen ausgespuckten Ergebnisse sortieren und aufbereiten können. Aus diesem Grund nannte man PERL auch eine: 'Practical Extraction and Report Language' (praktische Auszugs- und Berichtsprache), was aber nur ein Backronym ist, weil die ursprüngliche Bedeutung des Namens Perl eine andere ist (siehe nächstes Kapitel). Ein anderes Backronym, das von Larry ebenso für „offiziell“ erklärt wurde, ist: 'Pathologically Eclectic Rubbish Lister' (krankhaft ausufernder Auflister von Blödsinn), denn mit Perl kann man wirklich sehr sehr unverständliche Programme verfassen. Warum das so ist, erklär' ich auch im nächsten Kapitel.

Mit der Zeit lernte Perl auch mit binären Daten umzugehen und viele weitere nützliche Dinge, die überall abgeschaut wurden. Besonders mit seiner fünften Version veränderte sich Perl zu einer „richtigen“ Programmiersprache, als nicht nur die objektorientierte Programmierung eingeführt wurde, sondern auch die diesem Konzept zugrunde liegenden Module. Diese Module, die Perl meist um eine wertvolle Fähigkeit ergänzen, zum Beispiel graphische Ausgabe, Herunterladen von Webseiten oder Steuern von Robotern, findet man in großer Anzahl und in oft sehr guter Qualität in dem zentralen Archiv namens CPAN. Kritiker und Anhänger von Perl sind sich zumindest darin einig, dass der Erfolg von Perl heute zu einem bedeutenden Teil am CPAN liegt, mit dessen Hilfe man auch anspruchsvollere Aufgaben in nur wenigen Zeilen Quellcode lösen kann, indem man mehrere fertige Module kombiniert.

Das entspricht eigentlich immer noch dem ursprünglichen Prinzip des „Skriptens“, obwohl sich dieser Begriff erweitert hat auf eine Bedeutung, die man etwa mit kürzeres, schnelleres, komprimiertes Programmieren übersetzen kann. Neben Perl enstanden nämlich noch seit den 80er Jahren eine Reihe weiterer „Skriptsprachen“ wie Ruby, Python, PHP, Tcl, Visual Basic Script, die dem Programmierer einiges an Arbeit abnehmen oder vereinfachen. Manche Autoren sehen darin eine „nächste“ oder „höhere“ Generation an Computersprachen, die sich noch näher an den Bedürfnissen der Programmierer orientieren und noch weniger an den konkreten Fähigkeiten einer Maschine.

Auch eine wichtige Gemeinsamkeit dieser Skriptsprachen ist, dass es Interpretersprachen sind. Das sind Sprachen, bei denen das Programm immer noch einen Interpreter benötigt, der den Quellcode ausführt. Ein Vorteil daran ist, dass man keinen weiteren Aufwand treibt, um ein lauffähiges Programm zu bekommen. Nur den Quellcode schreiben und das Programm ist fertig. Es läuft sogar meist unverändert auch unter anderen Betriebssystemen. Man braucht dafür nur einen neuen, unter diesem Betriebssystem lauffähigen Interpreter. Dieser Vorteil wurde aber lange Zeit wenig genutzt, weil diese Interpreter zu langsam waren, was aber mit den hohen Geschwindigkeiten neuerer Hardware ausgeglichen wird. Außerdem erkannte man mittlerweile, dass interpretierte Programme viel besser optimiert werden können als kompilierte, weil zum Zeitpunkt der Ausführung sehr viel mehr über den aktuellen Computer bekannt ist als bei der Programmierung.


Larry und die Perl-Kultur

Was ist perlish?

Neben der ganzen Logik und der Technik übersehe bitte niemand, dass Programmieren für manche Menschen Begeisterung, Leidenschaft und Berufung ist. Nicht wenige davon halten Perl für eine Lebensphilosophie, eine Art zu denken und zu handeln, die man auf alles übertragen kann. Nach dieser Einstellung wird „perlish“ genannt, was für bequem, cool, eigenwillig, treffend oder clever gehalten wird. Larry Wall hat von Anfang an mit witzigen und spitzfindigen Bemerkungen, Vorträgen und Büchern darüber referiert, wofür Perl steht und was perlish ist. Dabei prägte er die folgenden Abkürzungen und Slogans, welche die Perl-Philosophie wiedergeben sollen.

Leitsprüche

  • TIMTOWTDI wird auch timtoday ausgesprochen, steht aber für "There Is More Than One Way To Do It", zu deutsch: „Es gibt mehrere Wege, etwas zu tun.“ Damit ist gesagt, dass es in Perl mit Absicht für jede Aufgabe viele Wege gibt, sie zu lösen, und dass die Sprache es dem Programmierer überlässt, welchen Weg er wählt. Perl wird von Larry Wall als bescheidener Diener gesehen, der möglichst vielen unterschiedlichen Menschen behilflich sein will, ohne ihre Freiheit einzuschränken.
  • „Make easy jobs simple and the hard possible.“ deutsch: „Lass die einfachen Aufgaben einfach und mach die schweren Aufgaben lösbar.“ Darin stecken eigentlich 3 Aussagen.
  1. Für einfache Dinge braucht man in Perl nichts anzumelden oder vorzubereiten. Nur die einfache Anweisung und Perl tut, was es soll.
  2. Perl will die Möglichkeit bieten, den Quellcode großer und komplexer Programme beherrschbar zu gestalten.
  3. Es wird versucht, beide Prinzipien zu harmonisieren, damit beides parallel mit einer Sprache erreicht wird.
  • Eine Programmiersprache kann, wie eine natürliche Sprache auch, verschieden interpretierbar sein. Für eine Programmiersprache gilt aber, dass sie keine Mehrdeutigkeit erlaubt. Es muss also eine eindeutige Implementierung geben. Daher wurde bei der Umsetzung der Sprache dieses Prinzip verfolgt: Perl verhält sich so, wie es der Programmierer am ehesten erwartet.
  • „Postmodernism“: Larry Wall nennt Perl auch die erste postmoderne Programmiersprache. Dahinter steht der Gedanke von der Befreiung von Dogmen, die oftmals eine Ära kennzeichnen. Techniken wie z.B. objektorientierte Programmierung sollten nämlich nicht zu Dogmen überhöht werden, die blind befolgt werden, weil es gerade schick ist. Jeder sollte das verwenden, was für ihn am nützlichsten ist oder was ihm am meisten Freude bereitet.

Es geht bei Perl also sehr um die Freiheit des Programmierers.




Der Einstieg

„Hello World!“

Wer das Pech hat, vor einem Rechner ohne Perl zu sitzen, und niemanden gefunden hat, der ihm das abnehmen kann, sollte einen Blick in unsere Installationsanleitung werfen.

Traditionsgemäß ist das erste Programm, das man in einer neuen Programmiersprache schreibt, eines, das 'Hello World!' ausgibt.

Hello World

hello.pl:

print "Hello World!\n";

Das typische Einstiegsbeispiel einer Programmiersprache, das Ausgeben von "Hello World!" auf dem Bildschirm, beschränkt sich bei Perl auf eine einzige Zeile. Sie enthält die Anweisung, einen Text auszugeben und den Text selbst, gefolgt von einem Semikolon, welches das Ende der Anweisung anzeigt. Der Text ist dabei in doppelte Anführungszeichen (") eingeschlossen. Dadurch werden bestimmte Zeichenfolgen durch Steuerzeichen ersetzt. In diesem Fall wird "Hello World!" als Text interpretiert, der eins zu eins auf dem Bildschirm ausgegeben wird. Das \n ist das Zeichen für einen Zeilenumbruch.

Auf unixartigen Systemen gibt es zwei Konzepte, das Programm ablaufen zu lassen.

  • Am einfachsten ist es, den Perl-Interpreter mit einem Kommando aufzurufen, und ihm die Quellcode-Datei als Parameter zu übergeben:
$ perl hello.pl
  • Am häufigsten wird meist zusätzlich zu Beginn des Quelltextes die sogenannte shebang-Zeile eingegeben. Sie gibt an, mit welchem Interpreter-Programm der nachfolgende Quellcode ausgeführt werden soll. Bei einer Standardinstallation liegt der perl-Interpreter bei Unix-Systemen im Verzeichnis /usr/bin, die Shebang-Zeile lautet also
#!/usr/bin/perl

Sollte sich der Perl-Interpreter woanders befinden, läßt er sich mit dem Kommando "which perl" lokalisieren.

Damit haben wir nun folgenden Code:

hello.pl:

#!/usr/bin/perl
print "Hello World!\n";


Das reicht aber noch nicht: Zusätzlich müssen wir die Quellcodedatei mit "chmod +x hello.pl" ausführbar machen. Das erlaubt uns den Programmstart mit:

$ ./hello.pl


Unter Windows hat die shebang-Zeile keine Funktion, schadet jedoch auch nicht. Unter Windows sollte unsere Komandozeile daher entsprechend anders aussehen:

C:\Perl\scripts> perl hello.pl
  • Ändern Sie das Programm so ab, dass es nicht mehr die Welt, sondern Sie begrüsst.
  • Ändern Sie das Programm so ab, dass es Sie nach der Begrüßung in der nächsten Zeile fragt, wie es Ihnen geht. Die Ausgabe sollte in etwa so aussehen:
Hallo Ihr_Name!
Wie geht es Ihnen?
  • Spielen Sie ein wenig mit dem Sonderzeichen \n herum. Was passiert, wenn Sie es weglassen oder verdoppeln?

Hinweis: Denken Sie an das Semikolon, wenn Sie eine neue print-Anweisung einfügen.

Dokumentation

Perl ist mit einer Fülle von Dokumentation ausgestattet. Diese ist über viele Handbuchseiten (engl. manual pages, kurz man pages) verstreut. Eine Übersicht über die vorhandenen Handbuchseiten kann man sich mit

man perl

anzeigen lassen.

man ist ein Unix-Befehl. Wenn Sie kein Unix oder ein ähnliches System wie Linux und BSD einsetzen, dann ist dieser Befehl auf Ihrem System möglicherweise nicht verfügbar.

Die Perl-Dokumentation ist auch im Web unter perldoc.perl.org erhältlich.

In diesem Wikibuch werden Sie an verschiedenen Stelle dazu aufgefordert, Informationen auf einer Handbuchseite nachzuschlagen. Damit ist dann stets gemeint, die betreffende Seite mit man oder im Web unter perldoc.perl.org zu betrachten.

Die in Perl eingebauten Funktionen sind auf der Handbuchseite perlfunc erläutert. Diese Handbuchseite ist lang und in der Regel müssen Sie etwas blättern, bis Sie die betreffende Funktion gefunden haben. Daher gibt es dafür ein Abkürzung:

 perldoc -f Funktionsname

zeigt Ihnen die Dokumentation zu genau dieser einen Funktion an.

  • Schlagen Sie die Handbuchseite zu man nach.
  • Lesen Sie nach, wie die Funktion print funktioniert. (Sie müssen noch nicht alles verstehen.) Hinweis: Denken Sie daran, dass Sie Dokumentation zu einer Funktion nicht nur auf eine Art nachschlagen können. (TIMTOWTDI).
  • Schlagen Sie mit perldoc im Katalog der häufig gestellten Fragen nach, welche Perl-Version Sie einsetzen sollten. Gibt es eine eindeutige Antwort? Welche Version setzen Sie ein?

Guter Stil

In Perl ist es sehr einfach, sehr kryptisch anmutenden Code zu schreiben, da praktisch alle Sonderzeichen mit Bedeutungen belegt sind und die Sprache Perl selbst viele Abkürzungen und implizites Verhalten bereit stellt.

Es wird im Allgemeinen als guter Stil angesehen, nicht alle Möglichkeiten in Perl auszureizen, da sich sonst leicht Fehler einschleichen und unwartbarer Code entsteht.

Einige sprachliche Möglichkeiten, die sich über die Jahre als problematisch erwiesen haben, kann man mit der Anweisung use strict; unterdrücken. Der Perlcompiler gibt dann bei der Compilierung eine entsprechende Warnung aus.

Eine weitere Anweisung hilft bei der Entwicklung „sauberen“ Codes. Die Perlsyntax erlaubt Ausdrücke, deren Auswertung nicht immer das bewirkt, was der Programmierer erwünscht. Perl selbst „kennt“ einige dieser Ausdrücke und kann sich selbst auffordern, bei Verwendung dieser Ausdrücke Warnungen auszugeben. Beispiel für einen solche Ausdruck ist die Addition einer Zahl und einer Zeichenkette. Obwohl dies von der Syntax her gültiges Perl ist, kann über die Sinnhaftigkeit zumindest gestritten werden. Die Anweisung use warnings; führt zur Ausgabe der Warnungen.

Die beiden angesprochenen use-Anweisungen sollten zu Beginn eines jeden Perlskripts stehen, da sie nicht nur bei der Fehlersuche helfen, sondern den Programmierer auch dabei unterstützden, Fehler zu vermeiden.

Um diese beiden Anweisungen erweitert sieht das erste Perlskript dann wie folgt aus:

hello.pl:

#!/usr/bin/perl
 
use strict;
use warnings;
 
print "Hello World!\n";
Querverweise: Siehe auch Guter Stil (in Stil und Struktur)


Variablen

Perl-Variablen

Unter einer Variable versteht man ganz allgemein einen Bezeichner für Daten. Früher konnte man davon sprechen, dass ein Bereich des Hauptspeichers mit dem Variablennamen identifiziert wurde. Im Gegensatz dazu existiert bei Perl die Möglichkeit auch eine Datei, ein Feld in einer Exceltabelle, eine Webseite auf einem Computer am anderen Ende des Globus und viele andere Vorkommen von Daten wie eine Variable zu behandeln. Im Normalfall ist aber auch in Perl eine Variable ein Bezeichner für Daten, die im Hauptspeicher des Rechners liegen. Perl übernimmt dabei die komplette Speicherverwaltung. Es verwendet ein für die Programmierer sehr bequemes System mit einem Zähler für jeden gespeicherten Wert. Mit diesem Zähler kann Perl feststellen, ob in dem Programm noch ein Verweis auf diesen Wert existiert. Variablen können in Perl beliebig groß sein. Von undef, dem Standardwert von Perl für eine Variable ohne Inhalt und den vielen Gigabyte Speicher, welche das jeweilige System Perl zur Verfügung stellen kann.

Skalare Variablen

Skalare Variablen, leicht erkennbar durch das vorangestellte Dollar-Zeichen ($), können fast jede Art von Daten speichern. Ihnen kann ein Wert mithilfe des '=' zugewiesen werden. In Skalaren werden auch Referenzen (Verweise auf andere Variablen; vergleichbar mit Zeigern in anderen Programmiersprachen) und Objekte gespeichert.

Zahlen

$var = 50;     #ganze Zahl
$var = 0.01;   #Fließkommazahl
$var = 1e2;    #wissenschaftliche Notation – dasselbe wie 100
$var = 1e-2;   #wie 0.01

In Perl als Skriptsprache muss, anders als in anderen, nicht-interpretierten Sprachen wie z. B. C, nicht angegeben werden, ob eine Variable eine ganze Zahl, Fließkommazahl, reelle Zahl, oder anderes enthält. Perl übernimmt die Bestimmung des Datentyps für uns, abhängig von dem jeweiligen Umfeld, in dem die Variable verwendet wird.

Beispiel
#!/usr/bin/perl
 
use strict;
use warnings;
 
my $a = 2;
my $b = 3;
print "$a + $b = ", $a + $b, "\n";

Die Ausgabe des Programmes:

2 + 3 = 5

Erklärung: Die Shebang-Zeile wurde bereits im letzten Kapitel erläutert, die beiden use-Anweisungen werden unter Stil und Struktur erläutert. In den beiden folgenden Zeilen werden die skalaren Variablen $a und $b mit dem Schlüsselwort my deklariert, außerdem werden ihnen die Werte 2 bzw. 3 zugeordnet. Das Schlüsselwort my beschreibt den Geltungsbereich einer Variable. Die dritte Zeile beginnt mit einer in " eingeschlossene Zeichenkette. Die Variablen werden innerhalb der Zeichenkette als String ersetzt. Hinter der Zeichenkette werden $a und $b mit dem mathematischen Operator + verknüpft. Sie werden also als Zahlen interpretiert und das Ergebnis wird ausgegeben. Abgeschlossen wird die Ausgabe durch einen Zeilenumbruch.

Perl stellt uns eine Vielzahl mathematischer Operatoren zur Verfügung, neben der hier verwendeten Addition ist uns u.a. auch Subtraktion, Multiplikation, Division und Potenzieren möglich (siehe Operatoren).

Zeichenketten (Strings)

$var = 'text';
$var = "text";

Skalarvariablen können auch Zeichenketten (Strings) enthalten. Diese werden, von einfachen (') oder doppelten (") Anführungszeichen umschlossen, der Variablen zugewiesen. Der Unterschied zwischen einfachen und doppelten Anführungszeichen besteht in der sogenannten Variableninterpolation. Dazu ein Beispiel:

#!/usr/bin/perl
 
use strict;
use warnings;
 
my $var = 5;
my $text = "Variable enthält: $var";
my $text2 = 'Variable enthält: $var';
print $text;
print "\n";
print $text2;
print "\n";

erzeugt folgende Ausgabe:

Variable enthält: 5
Variable enthält: $var

Was ist passiert? Bei der Zuweisung an $text, bei der wir doppelte Anführungszeichen benutzt haben, sucht der Interpreter in der zugewiesenen Zeichenketten nach Vorkommen von $Variablenname, und ersetzt diese durch den Inhalt der jeweiligen Variable – in unserem Fall also durch den Inhalt von $var. Dies nennt man Interpolation. Eine solche Interpolation wird jedoch bei einfachen Anführungszeichen nicht vorgenommen.

Nicht nur Variablennamen, sondern auch Steuercodes wie \n werden bei einfachen Anführungszeichen ignoriert. Beispielsweise erzeugt

 print "\n";

einen Zeilenumbruch, wohingegen

 print '\n';

einfach die Zeichenfolge \n ausgibt.


Beispiel

Nehmen wir also nochmal das Additions-Beispiel von vorhin und verschönern es ein wenig.

#!/usr/bin/perl
 
use strict;
use warnings;
 
my $a = 2;
my $b = 3;
my $c = $a + $b;
 
print "$a + $b = $c\n";

Ausgabe:

2 + 3 = 5

Arrays

Ein Array enthält im Gegensatz zu einem Skalar nicht einen, sondern mehrere Werte. Dabei können diese Werte völlig frei gemischt werden. Es ist also möglich in dem selben Array Texte, Ganzzahlen, Kommazahlen u.ä. zu speichern. Zur Unterscheidung zwischen Arrays und Skalaren ist dem Array ein At-Zeichen (@) vorangestellt. Man kann sich ein Array als Liste von Skalaren vorstellen, dabei werden die einzelnen Werte über ganze Zahlen (Integer) eindeutig identifiziert. Nachfolgend ein kleines Beispiel:

#!/usr/bin/perl
 
use strict;
use warnings;
 
my @halblinge = ( "Bilbo", "Frodo", "Sam" ); # einfache Liste von Halblingen
print $halblinge[0], "\n";                   # gibt Bilbo aus
print $halblinge[1], "\n";                   # gibt Frodo aus

Was geschieht hier? Nun, zuerst wird ein Array mit dem Namen @halblinge erzeugt. Diesem wird eine Liste zugewiesen. Listen werden in Perl in einfache Klammern eingeschlossen. Da die Werte in der Liste Strings (Text) sein sollen, müssen sie als solche kenntlich gemacht werden. Dies kann man u.a. mit doppelten Anführungszeichen tun. Als letztes müssen die Werte einer Liste dann noch mit Kommata getrennt werden. Bei Listen von Strings ist es mithilfe des Listenoperators qw möglich, auf Kommata und doppelte Anführungszeichen zu verzichten. Die einzelnen Strings werden dann nur durch Leerzeichen getrennt. Mit dem qw-Operator ( quoted words / Wörter in Anführungszeichen ) sieht das obige Beispiel so aus:

#!/usr/bin/perl
 
use strict;
use warnings;
 
my @halblinge = qw( Bilbo Frodo Sam );       # einfache Liste von Halblingen
print $halblinge[0], "\n";                   # gibt Bilbo aus
print $halblinge[1], "\n";                   # gibt Frodo aus

Man kann Werte in einer Liste auch mit => trennen, dies werden wir bei den Hashes sehen.

Aber was soll das nun mit der zweiten und dritten Zeile? Da steht ja nun wieder ein Dollar-Zeichen vor dem Variablennamen. Das ist auch richtig so, denn aus dem Array soll nur ein einzelner skalarer Wert ausgegeben werden. Den Variablennamen mit einem vorgestellten @ an print zu übergeben, würde print aber dazu veranlassen alle Werte des Arrays auszugeben.

Perl unterscheidet hier Arrays von Skalaren, indem es an das Ende der Variable schaut. Dort ist nämlich der Platz des Wertes, auf den zugegriffen werden soll, in eckige Klammern geschrieben. Hierbei ist zu beachten, dass Arrays immer bei Null anfangen zu zählen und nicht bei Eins, wie man evtl. annehmen könnte.

Die Anzahl der Elemente eines Arrays erhält man, wenn man das Array im skalaren Kontext interpretiert:

my $anzahlHalblinge=@halblinge; 
print $anzahlHalblinge;            # ergibt 3

Man könnte bei diesem Beispiel den skalaren Kontext erzwingen indem man die interne scalar-Funktion benutzt. Somit könnte das vorhergehende Beispiel auch so aussehen:

print scalar @halblinge;            # ergibt 3 ( Klammern sind optional, timtowtdi! )

Hashes (assoziative Arrays)

Hashes sind ganz ähnlich wie Arrays Listen von Werten. Aber im Unterschied zu Arrays sind Hashes nicht geradlinig durchnummeriert, sondern jeder Wert bekommt seinen eigenen Namen (key) der frei gewählt werden darf, weshalb sie auch manchmal assoziative Arrays genannt werden. Dadurch lassen sich einige Programmieraufgaben wesentlich schneller und schöner lösen, als es mit normalen Arrays möglich wäre.

Damit Hashes von Arrays und Skalaren unterschieden werden können, wird dem Hash ein Prozentzeichen (%) vorangestellt. Beachte, dass auch bei Hashes dieses Prozentzeichen in ein Dollarzeichen gewandelt wird, wenn auf einzelne, skalare Werte des Hashes zugegriffen wird.

Eine weitere Eigenheit von Hashes ist es, dass der Key in geschweiften Klammern, und nicht wie bei Arrays in eckigen Klammern eingeschlossen wird.

%telefon = ('MaxMuster'   => '0815/12345',
            'KarlMaier'   => '0815/12346',
            'HansMueller' => '0815/12347' );
print $telefon{'KarlMaier'}, "\n";  # gibt 0815/12346 aus!

Um in diesem Beispiel auf alle Keys (in dem Fall die Namen) zugreifen zu können, kann man sich an der keys-Funktion von Perl bedienen. Diese Funktion liefert eine Liste der Keys aus dem Hash zurück.

my @list_keys = keys %telefon;
for (@list_keys) {
    print "$_", "\n";
}

oder kompakter:

for (keys %telefon) {   # Variablen sparen
    print "$_", "\n";
}

Dieses Beispiel liefert folgenden Output:

MaxMuster
KarlMaier
HansMueller

Natürlich muss es hier auch eine Möglichkeit geben, die Werte der Identifier im Listenkontext auszugeben. Das Gegenstück zur keys-Funktion ist die values-Funktion. Sie funktioniert genau nach demselben Prinzip.

my @list_values = values %telefon;
for (@list_values) {
    print "$_", "\n";
}

oder kompakter:

for (values %telefon) {   # Variablen sparen
    print "$_", "\n";
}