Woche 1

# Tag 1

#
Eine Einführung in Perl

Herzlich willkommen bei »Perl in 21 Tagen«! Ich als Ihre »Reiseleiterin« auf dieser dreiwöchigen Bildungsreise in die Welt von Perl möchte Ihnen alles Nötige zeigen und vorstellen - damit Sie am Ende mit Perl anstellen können, was Ihnen gerade in den Sinn kommt, und Sie sich intelligent an der Unterhaltung anderer Perl-Programmierer beteiligen können.

Heute beginnen wir mit ein paar Grundlagen, die Ihnen den Start in die Arbeit mit Perl erleichtern sollen. Die Lektion von heute ist kurz; zuerst ein wenig Hintergrundwissen, und dann legen wir los und lassen Perl mit ein paar einfachen Skripts laufen. Insbesondere sind unsere Themen heute:

- Ein paar Hintergrundinformationen zu Perl: was Perl ist, wer es erfunden hat, wer heute damit arbeitet
- Warum Sie Perl überhaupt lernen sollten (andere Gründe als »mein Boß hat mich dazu verdonnert«)
- Etwas Code, damit Sie eine Vorstellung bekommen, wie Perl geschrieben und ausgeführt wird (und auf die restlichen Lektionen dieser Woche vorbereitet sind)

Machen wir kein großes Aufheben und fangen wir einfach an. Woche eins, Tag eins, Abschnitt eins - und los!

## Was ist Perl, und wo kommt es her?

Perl hat nichts mit Perlen zu tun. Perl ist eigentlich eine Abkürzung. Es steht für Practical Extraction and Report Language. Das könnte man mit »Praktische Extraktions- und Report-Sprache« übersetzen, wenn es nicht so schrecklich klänge. Denn es ist eine ziemlich treffende Beschreibung von Perls besonderen Stärken: Extraktion für das Anschauen von Dateien und das Herausziehen wichtiger Teile (zum Beispiel aktueller Daten aus einer HTML-Datei oder Benutzer- oder Host- Namen aus einer Netzwerk-Log-Datei); Report für das Generieren von Ausgaben und Reports über die gefundenen Informationen. Die Sprache ist praktisch, weil es viel leichter ist, diese Art von Programmen in Perl zu schreiben als in einer Sprache wie C. Aber, ob englisch oder deutsch, niemand klammert sich heute mehr an die Abkürzung. Perl ist einfach Perl.

Perl wurde 1987 von Larry Wall entwickelt, einem Amerikaner, der schon damals in der Unix-Software-Welt ziemlich bekannt dafür war, dass er sowohl das frei erhältliche Programm patch als auch den Usenet Newsreader rn geschrieben hatte. Es geht die Geschichte um, dass Larry gerade an einer Aufgabe arbeitete, für die das Unix- Programm awk (das zu dieser Zeit populäre Extraktions- und Report-Programm) nicht ausreichte, ihm aber klar wurde, dass die Lösung seiner Aufgabe in einer Sprache wie C eine Menge Arbeit bedeuten würde. So erfand er eine eigene Skriptsprache - Perl. Er borgte sich dabei einiges aus diversen anderen Unixtools und -sprachen wie sed, grep, awk, Shell-Skripts und, ja, C.

Außerdem wurde Perl, wie patch und rn, frei an die Unix-Gemeinschaft gegeben. Die Unix-Gemeinschaft griff Perl dankbar auf. Jahrelang war Perl die bevorzugte Sprache für Unix-Systemadministratoren und andere Unix-Programmierer. Sie brauchten eine flexible, schnell zu programmierende Sprache zur Lösung von Aufgaben, die für Shell- Skripting zu komplex waren und deren Lösung in Sprachen wie C einen deutlichen Mehraufwand bedeutet hätte. Es lag an seiner Popularität als Unix-Sprache, dass Perl sich auch als Web-Sprache zum Erstellen von CGI-Skripts durchsetzte - so gut wie alle Webserver liefen früher auf Unixsystemen. Mit CGI (Common Gateway Interface) konnte - und kann - man mit Formularen oder anderen »webseitigen« Eingaben interaktiv Programme und Skripts auf dem Webserver ablaufen lassen. Perl paßte wunderbar in diese Nische, und als in den letzten Jahren das World Wide Web und CGI immer populärer wurden, wuchs auch das Interesse an Perl enorm. Selbst als Webserver dann auch auf anderen Systemen liefen, zog Perl mit ihnen zusammen um und blieb für diese Anwendung weiterhin populär.

Perl ist eigentlich das »Kind« von Larry Wall, der sich zunächst allein um Weiterentwicklung und Updates kümmerte. Mit dem plötzlichen Anstieg von Perls Beliebtheit kümmert sich jetzt eine engverzahnte Gruppe von freiwilligen Programmierern um diese Aufgaben. Diese Programmierer, darunter auch Larry Wall selbst, arbeiten weiter am Quellcode von Perl, portieren ihn auf Nicht-Unix- Plattformen, koordinieren Bugfixes und geben die »Standard« Perl Releases heraus (in der Datei Changes der Standard-Perl-Distribution finden Sie eine Namensliste dieser »Perl-Hauptdarsteller«). Perl gehört keiner einzelnen Organisation. Wie die GNU- Tools (GNU-Emacs, GCC, GDB etc.) und das Betriebssystem Linux wird Perl auf einer freiwilligen Goodwill-Basis entwickelt und gemanagt. Es ist ebenfalls kostenlos. Alles, was Sie tun müssen, ist, es zu laden und zu installieren.

> Die aktuelle Perl-Version ist Perl 5. Das ist auch die Version, die in diesem Buch behandelt wird. In allen Versionsnummern folgen auf die 5 ein Punkt und viele Zahlen. Das sind die Nummern der Patches, kleineren »Neuauflagen«, die meistens in der Originalfassung gefundene Bugs beheben (obwohl sich manchmal auch einige neue Features einschleichen). Für die Unix- und Windows-Plattform war, während ich dieses Buch schrieb, Perl 5.005 aktuell, für den Macintosh lag »nur« Version 5.004 vor. Diese kleineren Nummern der Releases haben sich, wenn Sie all das hier lesen, mittlerweile möglicherweise geändert, an allen Perl-Portierungen wird weiter gearbeitet (außerdem können jederzeit separate weniger stabile Betaversionen und auch eine neue »offizielle Version« erscheinen). Sie müssen aber nicht jedes kleine Update mitmachen; wirklich wichtig ist vor allem, dass Sie Perl 5 installiert haben. Seit Perl 5.005 unterstützt der Kern auch Windows (anders als bei den verschiedenen oft inkompatiblen Portierungen, die es vorher gab). Wenn Sie mit Windows und eines älteren Perl-Release arbeiten, empfehle ich Ihnen dringend ein Update auf die neuere Version. Der neue Kern behebt viele Bugs, gleicht Unterschiede aus und erleichtert die Arbeit ungemein.

> Die Beispiele in diesem Buch wurden mit der Unix-Version 5.005_02 geschrieben und mit ActiveState's Perl for Windows build 508 und MacPerl 5.2.0r4 (einer 5.004-Portierung) getestet. In den Anhängen C, D und E erfahren Sie, wie man diese Perl-Versionen bekommt und installiert.

## Warum Perl lernen?

Die Zahl der heute auf dem Markt erhältlichen Programmiersprachen ist enorm. Und wie es aussieht, behauptet jede von ihnen, sie könne all Ihre Probleme in der halben Zeit und zu einem Viertel der Kosten lösen und dabei noch Kaffee kochen .... Warum also Perl lernen und nicht eher eine dieser anderen Sprachen?

Das beste Argument lautet: Unterschiedliche Werkzeuge eignen sich unterschiedlich gut für unterschiedliche Aufgaben. Perl bietet Ihnen für eine Menge allgemeiner Aufgaben viele besonders gute Werkzeuge. Doch es gibt darüber hinaus noch ein paar mehr gute Gründe, Perl zu lernen und zu nutzen.

#### Perl ist nützlich

Perl ist wahrscheinlich die richtige Sprache für Sie, wenn eine der folgenden Aussagen auf Sie zutrifft:

- Sie sind ein Systemadministrator auf der Suche nach einer Allzweck- Skriptsprache
- Als Web-Administrator stehen Sie vor einem Dutzend CGI-Programmen, die Ihre Webdesigner von Ihnen geschrieben haben wollen.
- Sie sind ein recht versierter Unix-Anwender und möchten Ihr Wissen erweitern.
- Sie sind Programmierer und möchten schnell einen Prototyp für ein komplizierteres Programm schreiben.
- Sie möchten einfach nur eine Sprache, mit der Sie alles mögliche anstellen können.

Sie können mit Perl richtig sinnvolle Arbeit erledigen, und das ziemlich schnell.

#### Perl braucht keinen Software-Schnickschnack

Wenn Sie mit Perl arbeiten möchten, brauchen Sie kein hochglanzverpacktes Programm zu kaufen. Sie brauchen keinen Perl-Compiler oder integrierte Entwicklungsumgebung. Sie brauchen keinen Browser, der Perl unterstützt, und keinen Computer, der »Perl inside« sagt. Sie brauchen nur eines: den Standard-Perl- Interpreter. Und den bekommen Sie umsonst, ganz einfach, indem Sie sich ihn herunterladen. Wenn Sie einen Unix-Shell-Account bei einem Internet Service Provider haben, haben Sie ihn vielleicht schon.

Okay, eine andere Sache brauchen Sie noch: einen Texteditor, mit dem Sie Ihre Perl- Skripts schreiben. Irgendeiner ist aber bei jedem System, auf dem Perl läuft, schon dabei, also sind Sie nach wie vor auf der sicheren Seite.

#### Perl ist schnell zu programmieren

Perl ist eine Skriptsprache. Das bedeutet, dass Ihre Perl-Skripts reine Textdateien sind, die sofort ausgeführt werden, wenn Perl sie ablaufen läßt. Sie brauchen keinen Compiler, der Ihren Code wie bei einer Sprache wie C oder Java in ein anderes Format, etwa eine ausführbare oder Bytecode-Datei, verwandelt. Deswegen können Sie mit Perl schneller und einfacher als in C Ihre ersten Programme laufen lassen, debuggen und verändern.

> Skriptsprachen werden in der Computersprache oft interpretierte Sprachen genannt. Obwohl Perl eine interpretierte Sprache zu sein scheint, weil seine Programme Skripts sind und der Perl-Interpreter diese Skripts ausführt, ist Perl in Wahrheit beides, eine kompilierte und eine interpretierte Sprache.

> Wenn Sie ein Perl-Skript starten, liest Perl das ganze Skript ein, kompiliert es und führt dann das Ergebnis aus. Obwohl Perl dadurch sehr interpretiert aussieht und Sie Perl-Skripte ändern und neu ausführen können wie bei einer interpretierten Sprache, haben Sie in einem gewissen Maße auch Kontrolle über den Kompilierungsprozeß. Perl läuft auch schneller als eine interpretierte Sprache (obwohl es nicht ganz so schnell ist wie eine kompilierte).

#### Perl ist portierbar

Da Perl eine Skriptsprache ist, gilt: Ein Perl-Skript ist ein Perl-Skript, ist ein Perl- Skript, ganz egal auf welcher Plattform Sie es laufen lassen. Zwar gibt es Unterschiede in Perl auf verschiedenen Plattformen und auch ein paar Features, die nur auf bestimmten Plattformen funktionieren (ich werde jeweils darauf hinweisen), doch in den meisten Fällen kann man ein Skript von einer Plattform zur anderen verschieben, ohne es irgendwie zu ändern - ohne es aufwendig auf ein neues Betriebssystem zu portieren, ohne noch einmal den Quelltext kompilieren zu müssen.

#### Perl ist leistungsfähig

In Perl sind viele ziemlich komplexe Unix-Tools eingeflossen. Und es hat alle Features, die Sie in einer High-Level-Sprache erwarten (und viele, die Sie nicht erwarten). Fast alles, was Sie in einer anspruchsvollen Sprache wie C machen können, geht auch in Perl, obwohl es natürlich Aufgaben gibt, für die C besser als Perl geeignet ist und umgekehrt. Sie können in Perl strukturiert programmieren. Sie können in Perl fortgeschrittene Datenstrukturen bauen. Sie können in Perl objektorientiert programmieren.

Wenn Ihnen Perl allein nicht gut genug ist, gibt es außerdem umfassende Archive mit vielerlei Tools und Bibliotheken (Module genannt) für diverse häufige Aufgaben. Module für Datenbanken, Interaktivität, Netzwerke, Verschlüsselung, Verbindungen zu anderen Sprachen - so ziemlich alles Erdenkliche ist in diesen Archiven erhältlich. Wenn Sie denken: »Dies und jenes habe ich jetzt mit Perl vor«, hatte in vielen Fällen schon jemand dieselbe Idee und hat seinen Code über die Archive zur freien Verfügung gestellt. Perls kooperative Natur hat zur Folge, dass es eine enorme Menge von Ressourcen gibt, die Sie für sich nutzen können.

#### Perl ist flexibel

Eins der Mottos von Perl ist: There's more than one way to do it (»Es gibt mehr als einen Weg, Dinge zu tun.«). Viele Wege führen zum Ziel. Darauf verweisen Perl-Leute oft mit der Abkürzung TMTOWTDI. Merken Sie sich diesen Satz, denn ich werde im ganzen Buch immer wieder darauf zurückkommen. Die Philosophie beim Entwurf von Perl war, dass unterschiedliche Programmierer auch unterschiedliche Methoden haben, sich Problemen zu nähern und sie zu lösen. Deshalb stellt Ihnen Perl, anstatt von Ihnen zu verlangen, Ihre Denkweise an einen kleinen Satz von Befehlen und syntaktischen Strukturen anzupassen, eine enorme Anzahl von Konstruktionen und Abkürzungen zur Verfügung - von denen viele letztlich genau das gleiche machen wie andere, nur auf eine etwas andere Art und Weise.

Das macht Perl zu einer sehr umfangreichen, komplexen und komplizierten Sprache (als ich das erste Mal auf Perl traf, als junge, idealistische Programmiererin, war meine erste Reaktion: »Es ist so häßlich!«). Aber der Umfang von Perl und die Vielzahl seiner Möglichkeiten machen es auch extrem flexibel und angenehm im Gebrauch. Kompliziert kann es eigentlich nur werden, wenn Sie Perl-Skripts von anderen lesen müssen. Selbst eins zu schreiben, ist dagegen ziemlich einfach, denn es liegt ganz bei Ihnen, ob Sie ein ganz geradliniges, C-artiges Skript schreiben - nur einige der vielen Perl-Abkürzungen verwenden und dabei komplett lesbar bleiben - oder ob Sie sich so schwer auf Perl-Seiteneffekte und versteckte Features stützen, dass Sie alle, die versuchen, Ihr Skript zu lesen, damit in den Wahnsinn oder zur Verzweiflung treiben (manchmal ist es recht lustig, auf diese Art einen ruhigen Nachmittag zu verbringen). Sie entscheiden, wie Sie Perl einsetzen möchten - Sie müssen nicht Ihre Denkweise ändern, um sich der Sprache anzupassen. Manchmal denke ich immer noch, Perl ist ja so häßlich - aber ich finde es auch wirklich cool, und es macht Spaß, damit zu arbeiten. Das kann ich von C nicht sagen, das zwar konsistenter und eleganter ist, aber meiner Meinung nach viel mehr Schinderei mit sich bringt.

#### Perl ist leicht zu lernen

Trotz des Umfangs und der Komplexität von Perl, trotz seiner zahllosen Features ist es nicht schwer zu lernen. Und zwar genau wegen der vielen verschiedenen Möglichkeiten, ein und dasselbe Problem zu lösen: Es gibt immer auch eine einfache. Alles von Perl zu beherrschen, kann ziemlich einschüchternd sein (und nur eine Handvoll Leute können von sich behaupten, wirklich jede Nuance der Sprache zu kennen). Aber die einfachen Teile von Perl sind tatsächlich sehr einfach (insbesondere wenn Sie schon etwas Programmiererfahrung haben), und Sie können sehr schnell ausreichend Perl lernen, um es sinnvoll einzusetzen. Sie gewinnen damit vielleicht keine Schönheitswettbewerbe, aber es wird funktionieren. Wenn Sie dann Fortschritte machen und vertrauter mit der Sprache werden, können Sie mehr und mehr Features und Abkürzungen hinzufügen und dann ganz besonders schön oder elegant oder kryptisch kurz schreiben, ganz wie Sie möchten.

#### Da draußen ist die Perl-Gemeinde

Entwicklung und Support von Perl finden jetzt seit etwa zehn Jahren auf freiwilliger Basis statt. Rund um die Welt widmen Programmierer ihre Zeit der Weiterentwicklung von Sprache und zusätzlichen Tools. Auf der einen Seite sieht das vielleicht sehr anarchistisch aus - da ist keine Firma verantwortlich zu machen, wenn etwas schiefgeht, keine Support-Nummer, die man anrufen kann, wenn man es nicht zum Laufen bringt. Auf der anderen Seite stellt die Perl-Gemeinschaft mittlerweile in so enormem Umfang hilfreiche Bibliotheken, bergeweise Dokumentation und FAQs (Frequently Asked Questions - häufig gestellte Fragen und die Antworten darauf) zur Verfügung, dass Sie die meisten Ihrer Fragen auch beantwortet und Hilfe bekommen, wenn Sie welche brauchen. Das werden Sie mit C nicht so haben, wo Sie normalerweise ein oder zwei Bücher kaufen oder sieben oder zwanzig und dann immer noch auf sich gestellt sind. Einer der größten Vorteile von Perl sind die Menschen, die damit arbeiten - und ihre außergewöhnliche Hilfsbereitschaft. Larry Wall hat sich übrigens immer gewünscht, dass die Perl-Gemeinde wie ein kleines Stück Himmel funktioniert. Bis jetzt ist ihm dieser Wunsch erfüllt worden, und auch Sie können nach der Lektüre dieses Buches dazu beitragen, dass das so bleibt. Bitte, lassen auch Sie sich von diesem Modell anstecken.

## Erste Schritte zum eigenen Perl-Programm

Um Perl zu verwenden - damit zu programmieren und Perl-Skripts auszuführen -, müssen Sie es auf Ihrem System installiert haben. Das ist zum Glück nicht schwierig. Wie ich bereits erwähnt habe, können Sie Perl frei herunterladen. Es kostet Sie lediglich etwas Verbindungszeit mit dem Internet.

Wenn Sie Perl noch nicht installiert haben oder sich nicht sicher sind, starten Sie als erstes Ihren Webbrowser und gehen auf die Site `http://www.perl.com``/`. Speichern Sie diese Adresse zu Ihren Bookmarks oder Favoriten: Sie ist die zentrale Sammelstelle für alles, was mit Perl zu tun hat. Sie finden dort nicht nur das Perl-Interpreter-Paket selbst, sondern auch das Comprehensive Perl Archive Network (»umfassendes Perl- Archivnetz«, abgekürzt CPAN), Perl-News, Dokumentationen, Konferenzen und Wettbewerbe, Perl-Witze - so ziemlich alles, was Sie sich nur vorstellen können.

Auf der Seite `http://www.perl.com/latest.html` finden Sie aktuelle Informationen zu den neuesten Perl-Versionen für jede Plattform. Hier - und in den Anleitungen aus dem Perl-Paket selbst - steht, wie Sie Perl herunterladen und auf Ihrem System installieren.

Genauere Informationen bieten Ihnen die Anhänge C, D und E am Ende des Buchs. Dort ist im einzelnen erklärt, wie Sie Perl für Unix, Windows bzw. Macintosh installieren.

Bevor Sie weitermachen, sollten Sie Perl auf Ihrem System installiert und laufen haben.

## Ein Beispiel: Das allgegenwärtige »Hallo Welt«

Eine alte Tradition in der Programmierwelt ist das »Hallo Welt«-Programm. Wenn ein Programmierer eine neue Sprache lernt, schreibt er als erstes ein Programm, das einfach nur »Hallo Welt!« auf den Bildschirm ausgibt. Es liegt mir fern, die erste zu sein, die von dieser Tradition abweicht. So ist das erste Perl-Skript, mit dem wir uns in diesem Buch befassen, schon ein Klassiker. In diesem Abschnitt schreiben Sie das »Hallo Welt«-Skript und führen es aus, und ich werde Ihnen dann erklären, was dort passiert.

### Hallo Welt schreiben

Sie brauchen einen Texteditor. Keine professionelle Textverarbeitung-Software, sondern einfach einen Editor: Unter Unix tun es emacs, vi oder pico, in Windows das eingebaute Notepad, die Shareware-Programme TextPad oder UltraEdit; auf dem Mac können Sie den simplen in MacPerl eingebauten Texteditor nehmen oder das Mac-eigene SimpleText oder zum Beispiel die Shareware-Programme BBEdit oder Alpha. Welchen Texteditor auch immer - starten Sie ihn, und tippen Sie die zwei Zeilen aus Listing 1.1 ein (na gut, drei, wenn Sie die leere in der Mitte mitzählen).

> Schreiben Sie die Nummern und Doppelpunkte am Zeilenanfang nicht mit ab: das sind Zeilennummern. In allen Listings dieses Buchs stehen sie dort nur, damit ich Ihnen Zeile für Zeile erzählen kann, was im Skript geschieht.

Listing 1.1: Das Skript hallo.pl.

    1: #!/usr/bin/perl -w
    2:
    3: print "Hallo Welt!\n";

Wenn Sie auf Unix arbeiten, achten Sie unbedingt auf die erste Zeile (umgangssprachlich »sh'bang« oder »shebang-Zeile« genannt: »sh'«für den Sharp, das Kreuz, und »bang« für das Ausrufezeichen). Diese Zeile sagt Unix, mit welchem Programm es das Skript ausführen soll. Der einzige Haken dabei ist, dass die Pfadangabe in dieser Zeile dem korrekten Pfad zum Perl-Interpreter entsprechen muss. Wenn Sie ihn in /usr/local/bin/perl oder woanders in Ihrem System installiert haben, fügen Sie Ihren Pfad anstelle des Pfadnamens in Zeile 1 im Listing 1.1 ein.

Wenn Sie mit Windows oder Mac arbeiten, ist diese Shebang-Zeile normalerweise überhaupt nicht nötig. Sie stört aber auch nicht: durch das # am Anfang wird sie von Perl als Kommentar betrachtet und deshalb auf anderen Plattformen als Unix schlichtweg ignoriert.

Es ist sogar eine gute Idee, sich die Shebang-Zeile anzugewöhnen, auch wenn es nicht unbedingt notwendig ist - insbesondere, wenn Ihre Perl-Programme eventuell einmal auf Unix laufen sollen

> Wenn Sie vorhaben, Perl unter Windows für Web-CGI-Skripts einzusetzen, verlangen manche Webserver (wie z.B. Apache) eine Shebang-Zeile in Ihrem Perl-Skript (wenn auch eine im Windows-Stil, mit einem C: am Anfang). Noch ein Grund, sich das anzugewöhnen.

Speichern Sie jetzt Ihr Skript als, sagen wir, hallo.pl. Eigentlich können Sie die Datei nennen, wie Sie wollen, mit oder ohne die .pl-Erweiterung. Unter Windows sollten Sie das .pl aber lieber verwenden. Windows hat gern für jedes Programm eine eigene Dateinamensendung. Auf Unix-Rechnern sollten Sie Ihrem Skript natürlich nicht den Namen eines Unix-Befehls oder -Tools geben, nennen Sie es zum Beispiel nicht test - viele Unix-Varianten haben eine Routine mit diesem Namen, die dann anstatt Ihres Skripts ausgeführt würde.

> Ihnen ist nicht nach Tippen? Alle Skripts aus diesem Buch finden Sie sowohl auf der Begleit-CD zu diesem Buch als auch auf der Webseite zu diesem Buch unter `http://www.typerl.com.` Sie können die dortigen Versionen verwenden, anstatt sie mühsam einzutippen. Allerdings lernt man meistens viel besser, wie Perl-Skripts arbeiten, wenn man sie selbst eingibt (und dann die Fehler korrigieren muss, die dabei unvermeidbar auftauchen). Sie sollten das zumindest mit diesen ersten paar Skripts ausprobieren.

### Hallo Welt ausführen

Der nächste Schritt ist, Perl wirklich einzusetzen und Ihr Skript auszuführen.

Auf Unix müssen Sie zuerst Ihr Skript ausführbar machen und dann einfach den Namen des Skripts in die Kommandozeile eingeben, etwa so (das Fettgedruckte ist, was Sie wirklich eintippen, das Prozentzeichen ist der Prompt):

    % chmod +x hallo.pl
    % hallo.pl

> Abhängig von Ihrer Pfadvariablen müssen Sie beim Aufruf des Skripts eventuell das Verzeichnis mit eingeben, in dem es sich befindet, zum Beispiel:

>     % ./hallo.pl

Unter Windows starten Sie die MS-DOS-Eingabeaufforderung (oder einen anderen DOS-Prompt, wenn Sie mehrere haben) und tippen `perl -w` und den Namen des Skripts ein:

    C:\perl\> perl -w hallo.pl

> Unter Windows 95 müssen Sie jedesmal den vollen Perl-Befehl eingeben.

Wenn Sie mit Windows NT arbeiten und Perl so eingerichtet haben, dass .pl-Dateien mit Perl verknüpft sind (wie in Anhang B beschrieben), dann brauchen Sie nur den Namen des Skripts eingeben:

    C:\perl\> hallo.pl

In MacPerl wählen Sie zuerst Compiler Warnings im Skript-Menü und dann den Eintrag Run Skript aus dem Skript-Menü, um das Skript auszuführen.

Auf jeder Plattform sollten Sie jetzt den Satz »Hallo, Welt!« auf dem Bildschirm sehen.

> Falls Sie die MPW-Version von MacPerl benutzen, können Sie Perl von der MPW-Kommandozeile starten. Dann gelten alle Optionen, die ich das ganze Buch hindurch beschreibe, als würden Sie die Unix-Version von Perl ausführen. In diesem Buch werde ich mich aber in erster Linie auf die Stand-alone-Version von MacPerl beziehen.

### Was tun, wenn es nicht läuft

Was ist, wenn da kein »Hallo, Welt!« auf Ihrem Monitor steht? Vielleicht erhalten Sie statt dessen eine Perl-Fehlermeldung (zum Beispiel Can't find string terminator, »Kann das Ende der Zeichenkette nicht finden«). Prüfen Sie noch einmal Ihr Skript und stellen Sie sicher, dass Sie es korrekt eingetippt haben und dass alle Anführungszeichen, am Anfang und am Ende, richtig sind. Die erste Zeile beginnt mit einem Rautenzeichen #.

Wenn Sie die Meldung File not found (»Datei nicht gefunden«) oder Can't open perl script (»Kann Perl-Skript nicht öffnen«) erhalten, achten Sie darauf, dass Sie sich im gleichen Verzeichnis befinden wie Ihr Perl-Skript und dass Sie den Dateinamen exakt so eintippen wie beim Speichern der Datei.

Wenn Sie die Meldung Command not found (»Befehl nicht gefunden«) erhalten, überprüfen Sie, ob Sie Perl richtig installiert haben, und wenn Sie unter Unix arbeiten, ob der Pfad in Ihrer Shebang-Zeile dem korrekten Pfad zu Ihrem Perl-Interpreter entspricht.

Wenn Sie unter Unix die Meldung Permission denied (»Zugriff verweigert«) erhalten, prüfen Sie, ob Sie daran gedacht haben, Ihr Skript ausführbar zu machen (mit dem `chmod +x` Befehl).

Wenn Sie immer noch Probleme haben sollten und Ihre Version von Perl von einem Systemadministrator installiert worden ist, bitten Sie ihn um Hilfe. Vielleicht wurde Perl anders als Sie erwarten installiert, oder Ihnen ist die Ausführung von Perl-Skripts nicht gestattet.

### Wie funktioniert das Skript?

Jetzt haben Sie also ein zwei Zeilen-Perl-Skript, das den Satz »Hallo, Welt« auf den Bildschirm schreibt. Das scheint dann auch schon alles - sieht doch ganz einfach aus -, und doch stecken hier wichtige Perl-Grundlagen drin.

Zuallererst, das Prinzip bleibt auch bei längeren Perl-Skripts dasselbe: Ein Perl-Skript ist eine Folge von Anweisungen, die nacheinander, von oben nach unten, ausgeführt werden (manchmal gibt es Abzweigungen zu Subroutinen, mehrmals ausgeführten Code in Schleifen oder Code aus externen separaten Bibliotheken, aber das hier ist die Grundidee).

Die erste Zeile im »Hallo, Welt«-Skript ist ein Kommentar. Mit Kommentaren beschreiben Sie Teile des Perl-Codes, um zu erklären, was diese tun, oder zur Erinnerung, was Sie noch machen müssen - im allgemeinen um Ihr Skript aus welchem Grund auch immer zu kommentieren. Kommentare werden von Perl ignoriert; sie sind ausschließlich für Sie und jeden anderen, der Ihren Code liest, gedacht. Es gehört zum guten Programmierstil, ein Skript ausreichend zu kommentieren, auch wenn Sie weniger Kommentare als Code in Ihrem Skript stehen haben.

Die Shebang-Zeile, also die erste Zeile in Listing 1.1, ist eine spezielle Art von Kommentaren auf Unix-Systemen. Perl-Kommentare beginnen mit dem Rautenzeichen (#), und alles von diesem Zeichen bis zum Zeilenende wird ignoriert. Wenn Ihr Kommentar mehrere Zeilen lang sein soll, müssen Sie alle Zeilen mit # beginnen.

> Perl kennt zwar auch Kommentare, die über mehrere Zeilen gehen, doch sind diese vornehmlich für die internen Perl-Dokumentationen (PODs) und nicht für einfache Kommentare gedacht. Bleiben Sie am besten bei den Rauten.

Die zweite Zeile im Code (Zeile 3 im Listing 1.1) ist ein Beispiel einer grundlegenden Perl-Anweisung: Es ist ein Aufruf der eingebauten Funktion `print`, die einfach den Satz »Hallo, Welt« auf den Bildschirm ausgibt (nun, eigentlich auf das Standardausgabegerät, und das ist in diesem Fall der Bildschirm. Morgen erfahren Sie mehr über die Standardausgabe. Das `\n` innerhalb der Anführungszeichen löst einen Zeilenvorschub aus, genau wie in C; ohne dieses `\n` würde Ihr Skript am Ende des Satzes »Hallo, Welt« aufhören und nicht schön ordentlich am Anfang der nächsten Zeile.

Beachten Sie das Semikolon am Ende der `print`-Anweisung. Die meisten einfachen Perl-Anweisungen enden mit einem Semikolon. Das ist wichtig - vergessen Sie es nicht.

Mehr über all diese Konzepte - Anweisungen, Kommentare, Funktionen, Ausgabe und so weiter - später in diesem Kapitel und morgen, am Tag 2.

### Eine Anmerkung zu den Warnungen

Auf den verschiedenen Plattformen, auf denen Sie Perl laufen lassen können, werden Perl-Warnungen auf unterschiedliche Weise aktiviert:

- Unter Unix verwenden Sie die Option `-w` in der Shebang-Zeile.
- Unter Windows verwenden Sie die Option `-w` direkt beim Programmaufruf von Perl selbst.
- Auf dem Macintosh wählen Sie »Compiler Warnings« aus dem Skript-Menü.

Es ist eine ausgesprochen gute Idee, die Warnungen einzuschalten, wenn Sie Perl noch lernen (und oft auch, wenn Sie schon Erfahrung haben). Perl ist beim Verzeihen von eigenartigem oder oft auch falschem Code sehr großherzig - für Sie kann das stundenlange Fehlersuche bedeuten. Das Einschalten der Warnungen hilft, häufige Fehler und aus Sicht des Interpreters seltsame Stellen in Ihrem Code zu entdecken. Gewöhnen Sie es sich an, die Warnungen zu beachten, und Ihnen bleibt langfristig eine Menge Fehlersuche erspart.

## Ein weiteres Beispiel: Echo

Schauen wir uns ein weiteres Beispiel an. Das Skript aus Listing 1.2 bittet Sie um eine Eingabe und wiederholt diese Eingabe dann wie ein Echo auf dem Bildschirm, etwa so:

    % echo.pl
    Echo? Hi Laura
    Hi Laura
    %

> Auf Windows NT führen Sie das Skript mit dem Perl-Interpreter aus, also:

> c:>`perl -w echo.pl`

> Wenn Sie nur echo.pl eingeben, wird es nicht immer funktionieren (wenn die Ausgabe nur `pl` ist, kommt der `echo`-Befehl von NT in die Quere).

Listing 1.2 zeigt den Code des Skripts echo.pl:

Listing 1.2: Das Skript echo.pl.

    1: #!/usr/bin/perl -w
    2: # gibt die Eingabe wieder aus
    3:
    4: print 'Echo? ';
    5: $input = <STDIN>;
    6: print $input;

Sie brauchen im Augenblick noch nicht jede Zeile dieses Skripts zu verstehen. Morgen, am Tag 2, werde ich alles bis in kleinste Detail erklären.

Tippen Sie das Skript erst einmal ganz ein, und starten Sie es. Wichtig ist im Moment, dass Sie eine generelle Vorstellung haben, wie es funktioniert. Im folgenden ein kleiner Schnelldurchlauf durch den Code:

Zeile 1 und 2 sind beides Kommentare. In der ersten steht der Shebang und in der zweiten eine kurze Erklärung, was das Skript leistet.

Zeile 4 schreibt `Echo?` auf den Bildschirm. Beachten Sie, dass anders als bei »Hallo Welt!\n« in dieser Zeichenfolge kein `\n` steht. Das deshalb, weil hier ja um eine Eingabe gebeten wird, der Cursor also, wie bei einem Prompt so üblich, am Ende der Zeile stehen soll.

Zeile 5 liest eine an der Tastatur eingegebene Zeile und speichert sie in der Variablen namens `$input`. Sie brauchen sich weder um die einzelnen eingetippten Zeichen zu kümmern noch darum, wann das Zeilenende auftaucht. Perl liest alles ein, bis der Anwender die Eingabetaste drückt.

Zeile 6 schließlich gibt den Wert der Variablen `$input`, sprich den eingegebenen Text, auf dem Bildschirm aus.

## Ein drittes Beispiel: Das Krümelmonster

Lassen Sie uns, nur aus Spaß, noch ein weiteres Beispielprogramm schreiben. Früher, in den Tagen der textorientierten Computer-Terminals, geisterte eine Zeitlang ein Scherzprogramm namens »the cookie monster« (»das Krümelmonster«) herum. Das Krümelmonster-Programm verriegelte Ihr Terminal und sagte ohne Ende: »Gib mir einen Keks« (oder: »Ich will Kekse« oder etwas in der Art), und ganz egal, was Sie eintippten, es bestand immer nur darauf, dass es Kekse wolle. Der einzige Ausweg aus dem Programm war, wirklich `KEKSE` einzutippen - darauf kam man aber oft erst nach stundenlangem Versuchen.

Listing 1.3 zeigt eine simple Perl-Version des Krümelmonster-Programms.

Listing 1.3: Das Skript kekse.pl

    1: #!/usr/bin/perl -w
    2: #
    3: # Krümelmonster
    4:
    5: $kekse = "";
    6:
    7: while ( $kekse ne "KEKSE") {
    8:   print 'ich will KEKSE: ';
    9:   chomp($kekse = <STDIN>);
    10: }
    11:
    12: print "Mmmm. KEKSE.\n";

Das ist jetzt schon ein bißchen komplizierter als »Hallo Welt« oder »Echo«. Und so könnte es aussehen, wenn Sie es ausführen:

    % kekse.pl
    ich will KEKSE: asdf
    ich will KEKSE: exit
    ich will KEKSE: quit
    ich will KEKSE: stop
    ich will KEKSE: es reicht
    ich will KEKSE: @*&#@(*&@$
    ich will KEKSE: kekse
    ich will KEKSE: KEKSE
    Mmmm. KEKSE.
    %

> Die letzte Zeile ist eine kleine Variation des traditionellen Cookie-Monster-Programms. Beachten Sie auch, dass man aus dieser Variante ziemlich einfach herauskommt: Ein simples `[Strg]`-`[C]` wird es sofort abbrechen (oder ein Datei-Stop-Skript in MacPerl). Das Originalprogramm war allerdings nicht annähernd so nett. Aber hey, es ist erst Tag Eins, so heimtückisch können und brauchen wir noch nicht sein.

OK, und jetzt erkläre ich Ihnen Zeile für Zeile, was das Kekse-Skript macht:

- Zeile 2 und 3 sind Kommentare (das wird Ihnen mittlerweile klar sein).
- Zeile 5 initialisiert die Variable `$kekse` als einen leeren String »«.
- Zeile 7 ist der Anfang einer `while`-Schleife. Solange die Bedingung innerhalb der Klammern erfüllt ist, wird der Code innerhalb der geschweiften Klammern ausgeführt. Hier ist die Bedingung für die Schleife, dass die `$kekse`-Variable nicht das Wort KEKSE enthält, und zwar genau in dieser Schreibweise. Wurde `Kekse` oder `kekse` eingegeben, ist die Bedingung erfüllt, und die Schleife verlangt noch einmal KEKSE von uns. Mit `while` und anderen Schleifen befassen wir uns ausführlich am Tag 4.
- Zeile 8 bittet Sie um Kekse. Beachten Sie, dass hier kein Zeilenvorschubzeichen am Ende steht.
- Zeile 9 sieht wirklich eigenartig aus. Die Funktion `chomp`, über die Sie morgen mehr lernen werden, schneidet einfach das Zeilenvorschubzeichen (Eingabetaste) vom Ende Ihrer Eingabe ab und speichert sie in der Variablen `$kekse`.

Noch einmal: Falls Sie nicht jede Zeile verstehen, verfallen Sie nicht in Panik. Morgen wird alles klarer.

## Besonderheiten im Deutschen

Deutsche Sprache, schwääre Sprache! Zumindest in der Computerwelt hat das Deutsche seine Tücken: ä, ö, ü und ß.

Ändern wir zum Beispiel unser Krümelmonster-Skript dahin, dass es zwar nach Keksen schreit, man aber »süße Kekse« eingeben muss, damit das Programm wieder aufhört:

    7: while ( $kekse ne "süße Kekse") {
    8:   print 'ich will ganz bestimmte Kekse: ';
    9:   chomp($kekse = <STDIN>);
    10: }

Dann kann es Ihnen gut passieren, dass Sie zwar ganz richtig »süße Kekse« eintippen, das Programm aber immer weiter quakt. Was hier passiert, sehen Sie, wenn Sie explizit süße Kekse verlangen:

    7: while ( $kekse ne "süße Kekse") {
    8:   print 'ich will süße Kekse: ';
    9:   chomp($kekse = <STDIN>);
    10: }

Im DOS-Fenster zum Beispiel werden auf einmal s³¯e Kekse verlangt. Deswegen bringt die Eingabe von »süße Kekse« natürlich nichts. (Auch auf einem Unix-System kann es kryptisch werden: Unter X-Window kann es wunderbar funktionieren, auf der Konsole aber nicht mehr). Woran liegt das? Im ursprünglichen ASCII-Zeichensatz sind von 256 möglichen Zeichen-Codes nur die von 0 bis 127 festgelegt. Die übrigen Werte haben die verschiedenen Hersteller ganz unterschiedlich definiert, IBM hat sich etwas anderes ausgedacht als Apple, Microsoft wieder etwas anderes für DOS und noch etwas anderes für Windows und so weiter. Systemübergreifend »sicher« sind nur die folgenden (sichtbaren) Zeichen:

    !"#$%&'()*+,-./
    0123456789
    :;<=>?@
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    [\]^_'
    abcdefghijklmnopqrstuvwxyz
    {|}~

Bei allen anderen Zeichen (also leider auch ä, ö, ü, ß, Ä, Ö und Ü) kann es also Schwierigkeiten geben.

Und was macht man da? Am sichersten ist, in Perl-Skripts gar keine anderen als die oben genannten Zeichen zu verwenden, dann kann, in welchem Zeichensatz auch immer, gar nichts schiefgehen. Also »suesse Kekse«.

> Wenn Sie diese Schreibweise partout nicht ertragen, müssen Sie Ihre Skripts in dem Zeichensatz speichern, in dem Ihr Perl-Interpreter sie liest. Windows-Anwender können zum Beispiel mit einem Editor arbeiten, der Dateien auch in DOS-Code umwandeln kann. Oder sie schreiben ihre Skripts gleich ganz unter DOS (viel Spaß mit edit).

> Vergessen Sie aber nicht, dass Umlaute und ß dann zwar auf Ihrem System funktionieren, aber nach wie vor in Variablennamen nicht erlaubt und auf einem anderen System wieder eine mögliche Fehlerquelle sind. Deswegen verwende ich in diesem Buch die unschönere, aber sichere Schreibweise.

## Vertiefung

Vertiefung? Das war nicht gerade flach bis jetzt! Sie werden diesen Abschnitt am Ende jeder Lektion in diesem Buch finden. Hinter »Vertiefung« steht die Idee, dass es in Perl Dinge gibt, die Ihnen beizubringen ich keine Zeit habe, oder noch andere Methoden, die zum selben Ziel führen (Sie erinnern sich: »There's more than one way to do it«). Der heutige Vertiefungsabschnitt gibt Ihnen Hinweise, wo Sie mehr lernen können - nämlich in der Online-Dokumentation, die bei Ihrem Interpreter dabei ist, oder im Internet unter `http://www.perl.com`.

Ein Großteil der Online-Dokumentation liegt in Form von Manpages vor (man ist die Unix-Abkürzung für manual, man pages wortwörtlich also »Handbuchseiten«). Ich werde das ganze Buch hindurch auf diese Manpages verweisen, zum Beispiel die perlfunc- oder perlop-Manpages. Wenn Sie auf einem Unix-System arbeiten, können Sie diese Seiten normalerweise mit dem man-Befehl aufrufen, zum Beispiel:

    % man perlfunc

Die Inhalte aller Manpages sind auch im perl-eigenen POD-Format erhältlich, eine spezielle Form von Perl-Dokumentation, die auf jeder Plattform gelesen oder mit in Perl eingebauten Konvertierungsprogrammen in Volltext oder HTML konvertiert werden kann (POD steht für plain old documentation, was man vielleicht mit »klare alte Dokumentation« übersetzen könnte, aber doch lieber einfach POD sagt ... Das POD-Format dient insbesondere dazu, beim Schreiben von Modulen die dazugehörige Dokumentation direkt in den Code des Moduls zu integrieren). Die POD-Seiten selbst sind im pod-Verzeichnis Ihrer Perl-Distribution gespeichert, und Sie können sie unter Unix oder Windows mit dem `perldoc`-Befehl und dem Namen einer Perl-Manpage lesen, etwa so:

    % perldoc perlfunc

Wenn Sie etwas über eine bestimmte Perl-Funktion wie `print` oder `chomp` wissen möchten, verwenden Sie `perldoc` mit der Option `-f` folgendermaßen:

    % perldoc -f print

In Windows-Distributionen finden Sie die Manpages immer häufiger nur als HTML- Dateien im Verzeichnis docs\Perl. Die Dateien haben die gleichen Namen wie die Manpages (zum Beispiel perlfunc.html), Sie können sie also direkt mit Ihrem Webbrowser öffnen. Oder Sie öffnen zuerst die Datei perl.html (und setzen einen Bookmark), dort stehen gleich am Anfang die Links zu allen anderen Manpages, die Sie dann nur noch anzuklicken brauchen.

Auf dem Mac finden Sie alle Dokumentation zu Perl im Hilfemenü von MacPerl. Allerdings müssen Sie die Dateinamen erraten (die perlfunc-Manpage ist zum Beispiel unter »Builtin functions«, »Eingebaute Funktionen«, aufgelistet). POD-Dateien liest MacPerl mit der Anwendung Shuck.

Letzlich sind alle Perl-Manpages auch im Web unter `http://www.perl.com/CPAN- local/doc/manual/html/pod/` erhältlich. Ich finde es oft einfacher, die Perl-Manpages über das Web zu suchen und zu lesen als mit den perldoc oder man-Befehlen (vielen Windows-Benutzern geht es wohl genauso).

Wenn Sie lieber richtiges Papier in den Händen haben möchten oder Ihre Englischkenntnisse für die Manpages nicht ausreichen, empfiehlt sich im allgemeinen das Buch Programmieren mit Perl (Wall, Christiansen and Schwartz, deutsche Übersetzung Klicman, O'Reilly, 1997), auch bekannt als das Kamelbuch (wegen dem Kamel auf seinem Cover). Das Kamelbuch ist die definitive Referenzbibel für Perl und beschreibt es in fast beängstigenden Details - es ist ein ganz schöner Wälzer. Ziel von Perl in 21 Tagen ist, Ihnen alle Grundlagen und die allgemeine Praxis beizubringen. Wollen Sie aber einige der mehr esoterischen Features der Sprache erforschen, ist Programmieren mit Perl wahrscheinlich ein wichtiges Buch für Sie (meines ist zerfleddert und vollgekritzelt).

## Zusammenfassung

Heute war eher ein »Hallo, wie geht es Ihnen«-Tag als ein harter Arbeitstag. In dieser Lektion haben Sie einiges über den Hintergrund und die Geschichte von Perl gelernt, warum es Spaß macht und warum es für Sie nützlich ist, es zu lernen. Nach all den Hintergrundinformationen in der ersten Hälfte der Lektion haben Sie einen ersten Blick darauf werfen können, wie ein Perl-Skript überhaupt aussieht und wie Sie es auf Ihrem System zum Laufen bekommen. Außerdem haben Sie ein paar Grundlagen über Kommentare, Perl-Anweisungen und den Ablauf von Perl-Programmen gelernt. Spätestens jetzt sollten Sie Perl auf Ihrem System installiert und startklar haben - von nun an ist alles Code.

## Fragen und Antworten

Frage:
Wenn Perl so einfach zu lernen ist, warum brauche ich dann 21 Tage dafür?

Antwort:
Brauchen Sie vielleicht gar nicht. Wenn Sie 21 Tage Zeit und nichts anderes zu tun haben, können Sie eine ganze Menge mehr Perl lernen - mehr, als so manche Leute wissen, die sich selbst Perl-Programmierer nennen. Aber es ist auch gut möglich, dass Sie schon nach der ersten oder zweiten Woche genug Perl aufgeschnappt haben, um erst einmal klarzukommen, und Sie den schwierigeren Stoff ignorieren - bis Ihnen irgendwann abenteuerlicher zumute ist oder Sie mehr mit der Sprache machen müssen. Wenn Sie schon viel Programmiererfahrung mit einer anderen Sprache haben, kommen Sie durch die ersten Kapitel wahrscheinlich eine ganze Ecke schneller als nur ein Kapitel pro Tag. Eine Programmiererweisheit: Den Job so schnell wie möglich mit dem geringsten Arbeitsaufwand erledigen. Wenn Ihnen das schneller gelingt - wunderbar, das ist ganz im Sinne von Perl.

Frage:
Ich habe keine Programmiererfahrung, obwohl ich viel mit HTML gearbeitet habe und mich etwas mit JavaScript auskenne. Kann ich Perl lernen?

Antwort:
Ich wüßte nicht, was dagegen spräche. Obwohl ich dieses Buch für Leute geschrieben habe, die schon ein paar Programmierkenntnisse haben - wenn Sie sich in Ruhe durch das Buch, die Beispiele und Übungen arbeiten und selbst noch etwas experimentieren, sollte es Ihnen keine großen Schwierigkeiten bereiten. Perls Flexibilität macht es auch zu einer großartigen Sprache für Anfänger. Und wenn Sie sich mit anderen Webtechnologien schon auskennen, paßt Perl wunderbar dazu.

Frage:
Heißt der Quellcode, den ich schreibe, Perl-Programm oder Perl-Skript?

Antwort:
Das kommt darauf an, wie pedantisch Sie mit der Semantik sind. Man kann argumentieren, dass Programme kompiliert und Skripts interpretiert werden. Man habe ja schließlich C- und Java-Programme (und C- und Java-Compiler), aber JavaScript- oder AppleScript-Skripts. Und da Perl im wesentlichen eine interpretierte Sprache ist, ist der Code, den Sie schreiben, ein Perl-Skript und kein Perl-Programm. Man kann aber dagegenhalten, dass das, was Sie tun, Programmieren ist, und dieser Vorgang die Entwicklung eines Programms beinhaltet. Eine dritte Position wäre die Ansicht, dass es eigentlich überhaupt keine Rolle spielt. Diese Auffassung ist mir äußerst sympathisch, doch mein Verleger verlangt Konsistenz von mir; also bleibe ich beim ersten Argument und nenne sie Skripts.

Frage:
Ich habe den Hallo-Welt-Einzeiler eingetippt, aber er läuft einfach nicht!

Antwort:
Sind Sie sicher, dass Sie Perl auf Ihrem System installiert haben? Perl zu installieren und zum Laufen zu bringen, ist die Hauptaufgabe von heute. Wenn Sie an das Ende vom Buch blättern, finden Sie in den Anhängen Installationsanweisungen für Ihr System (vorausgesetzt, Sie arbeiten mit Unix, Windows oder MacOS). Außerdem können die Dokumente Ihrer Perl- Distribution eine große Hilfe sein, alles an den Start zu bringen.

Frage:
Wenn ich in Windows auf meine Datei hallo.pl doppelklicke, öffnet sich ganz kurz ein Fenster und verschwindet dann wieder. Wie kann ich die Ausgabe meines Programms sehen?

Antwort:
Führen Sie die Skripts aus einer Kommandozeile oder einem DOS-Prompt aus, nicht aus dem Explorer-Fenster. Starten Sie zuerst die MS-DOS- Eingabeaufforderung, wechseln Sie in das entsprechende Verzeichnis, und tippen Sie dann `perl -w` und den Namen Ihres Skripts ein. Hier ein einfaches Beispiel:

        C:\> cd ..\scripte
      C:\scripte> perl -w hallo.pl

> Sollten Sie noch Schwierigkeiten haben, schauen Sie in die Windows Perl FAQs unter http://www.activestate.com/support/faqs/Win32.

Frage:
Ich arbeite unter Windows. Sie erwähnen, dass die #!- (Shebang-)Zeile am Anfang des Skripts eine reine Unix-Angelegenheit ist. Warum soll ich sie mit hineinnehmen, wenn ich nicht auf Unix arbeite und es auch nicht vorhabe?

Antwort:
Brauchen Sie nicht, wenn nicht zu erwarten ist, dass Ihre Perl-Skripts jemals auf Unix laufen (aber bedenken Sie, auch manche Webserver unter Windows verlangen danach). Weil die Shebang-Zeile mit einer Raute anfängt, ist sie eigentlich ein Kommentar, deswegen wird sie unter Windows ignoriert, und Sie können sie auch weglassen. Aber vielleicht sollen Ihre Skripts ja irgendwann doch einmal unter Unix eingesetzt werden - auf jeden Fall ist die Shebang-Zeile eine gute Angewohnheit.

Frage:
Das Skript hallo.pl- läuft wunderbar, aber kekse.pl gar nicht. Perl beschwert sich über die »undefined subroutine chomp«.

Antwort:
Klingt, als hätten Sie noch Perl 4. Dort gibt es die Funktion `chomp` noch nicht, deswegen wird sie für eine »undefinierte Subroutine« gehalten. Geben Sie `perl` mit der Option `-v` ein, dann sagt Perl Ihnen »this is Perl« und die genaue Version. Es sollte Perl 5 sein (dieses Buch behandelt Perl 5, und Sie werden Schwierigkeiten bekommen, wenn Sie versuchen, Perl-5-Features mit Perl 4 zu nutzen). Überprüfen Sie noch einmal Ihre Installation, und stellen Sie sicher, dass Sie für alle Ihre Skripts Perl 5 verwenden.

Frage:
Ich arbeite mit dem Editor emacs unter Unix. Gibt es einen speziellen Modus für Perl?

Antwort:
Selbstverständlich! Perl ist eine Unix-Sprache und eine populäre dazu. Sowohl in der Standard-GNU-emacs-Distribution als auch im Perl-Interpreter- Paket ist ein perl-mode dabei. Je nachdem, welche emacs-Version Sie benutzen und wie diese eingerichtet ist, kann eine .pl-Erweiterung oder eine Shebang-Zeile automatisch den perl-mode für Sie starten. Ansonsten schalten Sie ihn mit der Eingabe von `M-X perl-mode` ein.

Frage:
In Ihren Beispielen stehen in manchen print-Anweisungen doppelte Anführungszeichen und in anderen nur einfache. Warum?

Antwort:
Gut aufgepaßt! Dafür gibt es einen besonderen Grund, der damit zu tun hat, ob zwischen den Anführungszeichen Anweisungen wie `\n` oder Variablennamen stehen. Sie werden den Unterschied morgen lernen.

## Workshop

Der Workshop-Abschnitt, ein Bestandteil jedes Kapitels, ist in zwei Teile gegliedert:

- Ein Quiz - hier können Sie überprüfen, ob Sie den Stoff des Kapitels verstanden haben.
- Übungen - hier können Sie Ihr neues Wissen wirklich anwenden. Nur das bringt Erfahrung in der Arbeit mit Perl.

Die Lösungen zu Quiz und Übungsaufgaben stehen weiter unten.

### Quiz

1. Wofür steht Perl? Was bedeutet es?
2. Wer hat Perl ursprünglich geschrieben? Wer kümmert sich jetzt darum?
3. Welches ist die aktuelle Perl-Version?
4. Was sind die grundlegenden Unterschiede zwischen kompilierten und interpretierten Sprachen? Was davon ist Perl? Warum ist das nützlich?
5. Welche Aussage beschreibt Perl am besten?

- Perl ist eine kleine, mächtige, streng definierte Sprache mit einem Minimum an Konstrukten.
- Perl ist eine umfangreiche, mächtige, flexible Sprache mit vielen verschiedenen Möglichkeiten, etliche Dinge zu tun.

1. Was findet man auf der Webseite `http://www.perl.com`?
2. Was macht die Shebang-Zeile in einem Perl-Skript?
3. Wie erstellt man Kommentare in Perl?
4. Was sind Perl-Warnungen? Wie schalten Sie sie auf Ihrer Plattform ein? Warum sind sie nützlich?

### Übungen

1. Versuchen Sie, die Programme hallo.pl, echo.pl und kekse.pl auf die eine oder andere Art zu verändern. Übertreiben Sie es nicht: Entwickeln Sie nicht gleich ein Betriebssystem oder ähnliches, probieren Sie einfach ein paar Kleinigkeiten aus. Bauen Sie verschiedene Fehler in das Skript ein, und sehen Sie sich an, welche Fehlermeldungen Sie dann erhalten (geben Sie zum Beispiel Kommentare ohne das Rautenzeichen am Anfang ein, entfernen Sie die Anführungszeichen am Ende oder ein Semikolon). Machen Sie sich mit den verschiedenen Fehlermeldungen vertraut, die Perl ausgibt, wenn Sie Teile einer Anweisung vergessen.
2. Ändern Sie das Hallo Welt-Skript so, dass es die Begrüßung zweimal ausgibt.
3. Ändern Sie das Hallo Welt-Skript so, dass es die Begrüßung zweimal in derselben Zeile ausgibt.
4. FEHLERSUCHE: Was ist falsch an diesem Skript?

           !/usr/bin/perl -w
       print "Hallo, Welt!\n";

5. FEHLERSUCHE: Was ist falsch an diesem hier? (Tipp: Es sind gleich zwei Fehler)

           #!/usr/bin/perl -w
       print 'Geben Sie Ihren Namen ein: '
       # die Input-Daten speichern $input = <STDIN>;
       print $input;

6. (Bonusfrage) Kombinieren Sie die Hallo-Welt- und Krümelmonster-Beispiele so, dass das Skript Sie um die Eingabe Ihres Namens bittet und Ihnen dann immer wieder hallo sagt, bis Sie »bye bye« eintippen. Hier ein Beispiel, was das Skript ausgeben könnte:

           Geben Sie Ihren Namen ein: Laura
       Hallo, Laura!
       Geben Sie Ihren Namen ein: Anastasia
       Hallo, Anastasia!
       Geben Sie Ihren Namen ein: Turok der Allmächtige
       Hallo, Turok der Allmächtige!
       Geben Sie Ihren Namen ein: bye bye
       hallo, bye bye!
       %

## Antworten

Hier die Antworten auf die Workshop-Fragen aus dem vorigen Abschnitt.

### Antworten zum Quiz

1. Perl steht für Practical Extraction and Report Language. Das heißt, mit dieser Sprache extrahiert man Teile aus Dateien und erstellt darüber Berichte (reports). Das Wort practical (praktisch) bedeutet, dass es für diese Art von Aufgaben eine sehr nützliche Sprache ist.
2. Larry Wall ist der Originalautor von Perl, und er ist weiterhin eng mit dessen Entwicklung befaßt. Perl wird in erster Linie von einer Gruppe freiwilliger Entwickler gepflegt und unterstützt.
3. Die exakte Antwort auf diese Frage fällt abhängig von der Version, die Sie installiert haben, unterschiedlich aus. Die aktuelle Hauptversion ist allerdings Perl 5, auf meiner Unix-Maschine ist die Version 5.004_04 installiert.
4. Kompilierte Sprachen verwenden ein Compiler-Programm, um den Programmquelltext in Maschinencode oder Bytecode zu konvertieren. Man läßt dann diesen Code laufen, um das Programm auszuführen. Bei einem Interpreter ist aber der Quellcode gleichzeitig der finale Code. Der Interpreter liest die Quelldatei und führt sie aus, ohne ein Kompilat in einer Datei abzulegen.
5. Perl ist eine Kombination aus einer kompilierten und einer interpretierten Sprache. Es benimmt sich wie eine interpretierte Sprache, das heißt, es ist schnell zu schreiben, schnell zu ändern und auf verschiedene Plattformen portierbar; aber es kompiliert ebenfalls den Quellcode, bevor es ihn ausführt und hat deswegen die Fehlerkorrektur-Features und auch nahezu die Geschwindigkeit einer kompilierten Sprache.
6. Die zweite Aussage beschreibt Perl am besten:

- Perl ist eine umfangreiche, mächtige, flexible Sprache mit vielen verschiedenen Möglichkeiten, etliche Dinge zu tun.

1. Die Webseite `http://www.perl.com` ist die zentrale Sammelstelle für alles, was mit Perl zu tun hat: Dort schaut man nach der aktuellen Perl-Version, dem Comprehensive Perl Archive Network (Tools, Module und Utilities rund um Perl), Dokumentationen, FAQs und weiteren Informationen - so ziemlich allem, was Sie sich im Zusammenhang mit Perl nur wünschen können.
2. Die Shebang-Zeile wird unter Unix verwendet, um Unix zu sagen, mit welchem Programm es ein Skript ausführen soll. Sie enthält den Pfad zum Perl-Interpreter auf Ihrem System. Für andere Betriebssysteme sieht die Shebang-Zeile nur wie ein einfacher Kommentar aus und wird normalerweise ignoriert.
3. Kommentare in Perl beginnen mit einem #. Alles vom # bis zum Ende der Zeile wird ignoriert.
4. Perl-Warnungen sind spezielle Diagnosemeldungen, die helfen können, gebräuchliche Fehler zu beheben und Stellen zu finden, wo Sie vielleicht etwas anstellen, das zu unerwartetem Verhalten führt. Perl-Anfänger sind gut beraten, die Warnungen einzuschalten.
5. Um Warnungen unter Unix einzuschalten, verwenden Sie die Option -w mit dem Perl-Interpreter in der Shebang-Zeile.
6. Um Warnungen unter Windows einzuschalten, verwenden Sie die Option -w in der Perl-Kommandozeile.
7. In MacPerl schalten Sie Warnungen ein, indem Sie Compiler Warnings aus dem Skriptmenü wählen.

### Lösungen zu den Übungen

1. Wenn Sie diese Übung tatsächlich durchgeführt haben, dann kennen Sie jetzt einige Fehlermeldungen.
2. Eine Beispiellösung:

           #!/usr/bin/perl -w

       print "Hallo, Welt!\n";
       print " Hallo, Welt!\n";

3. Ihre Lösung könnte beispielsweise so aussehen:

           #!/usr/bin/perl -w

       print "Hallo, Welt! Hallo, Welt!\n";

4. Hier fehlt ein Rautenzeichen in der ersten Zeile des Skripts. Diese Zeile wird einen Fehler auslösen (unter Unix wird das Skript wahrscheinlich überhaupt nicht laufen).
5. Folgende zwei Fehler sollten Sie gefunden haben:

- Nach der ersten `print`-Anweisung fehlt das Semikolon am Zeilenende.
- Die nächste Zeile beginnt mit einem Kommentar - der ganze Text nach dem Rautezeichen wird für einen Kommentar gehalten und ignoriert.

1. Mit dem, was Sie heute gelernt haben, könnte Ihr Skript so aussehen:

           #!/usr/bin/perl -w
       #
       $name = "";

       while ($name ne 'bye bye') {
         print 'Geben Sie Ihren Namen ein: ';
         chomp($name = <STDIN>);
         print "Hallo, ";
         print $name;
         print "!\n";
       }

© Markt&Technik Verlag, ein Imprint der Pearson Education Deutschland GmbH