Copyright © 2012 O’Reilly Verlag GmbH & Co. KG
Die Informationen in diesem Buch wurden mit größter Sorgfalt erarbeitet. Dennoch können Fehler nicht vollständig ausgeschlossen werden. Verlag, Autoren und Übersetzer übernehmen keine juristische Verantwortung oder irgendeine Haftung für eventuell verbliebene Fehler und deren Folgen.
Alle Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt und sind möglicherweise eingetragene Warenzeichen. Der Verlag richtet sich im wesentlichen nach den Schreibweisen der Hersteller. Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen. Kommentare und Fragen können Sie gerne an uns richten:
Copyright:
6. Auflage 2012
Die Darstellung eines Lamas im Zusammenhang mit dem Thema
Perl ist ein Warenzeichen von O’Reilly Media, Inc.
Bibliografische Information der Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der
Deutschen Nationalbibliografie; detaillierte bibliografische Daten
sind im Internet über http://dnb.d-nb.de abrufbar.
Lektorat: Volker Bombien, Köln
Korrektorat: Astrid Sander, Köln
Satz: III-Satz, Husby; www.drei-satz.de
Umschlaggestaltung: Michael Oreal, Köln
Produktion: Andrea Miß, Köln
Belichtung, Druck und buchbinderische Verarbeitung:
Druckerei Kösel; Krugzell, www.koeselbuch.de
Dieses Buch ist auf 100% chlorfrei gebleichtem Papier gedruckt.
Vorwort
Typografische Konventionen
Verwendung der Codebeispiele
Die Geschichte dieses Buchs
Veränderungen in dieser Auflage
Danksagungen
Von Randal
Von Tom
Von brian
Von uns allen
1. Einleitung
Fragen und Antworten
Ist dies das richtige Buch für Sie?
Warum gibt es so viele Fußnoten?
Was ist mit den Übungen und ihren Lösungen?
Was bedeuten die Zahlen am Anfang der Übungen?
Wie soll ich als Perl-Dozent vorgehen?
Was bedeutet »Perl«?
Warum schuf Larry Perl?
Warum hat Larry nicht einfach eine andere Sprache benutzt?
Ist Perl nun schwer oder leicht?
Warum ist Perl so beliebt?
Was geschieht in Zukunft mit Perl?
Wofür ist Perl eigentlich geeignet?
Wofür ist Perl nicht geeignet?
Wo kann ich Perl bekommen?
Was ist das CPAN?
Wo bekomme ich Support für Perl?
Gibt es auch noch andere Arten von Support?
Was soll ich tun, wenn ich einen Bug in Perl entdecke?
Wie schreibe ich ein Perl-Programm?
Ein einfaches Programm
Was passiert im Innern des Programms?
Wie kann ich mein Perl-Programm kompilieren?
Eine Perl-Blitztour
Übungen
2. Skalare Daten
Zahlen
Alle Zahlen haben intern das gleiche Format
Fließkomma-Literale
Ganzzahlige Literale
Nichtdezimale ganzzahlige Literale
Numerische Operatoren
Strings
Strings in einfachen Anführungszeichen
Strings in doppelten Anführungszeichen
Operatoren für Strings
Automatische Umwandlung zwischen Zahlen und Strings
Eingebaute Warnungen
Skalare Variablen
Einen guten Variablennamen auswählen
Skalare Zuweisung
Binäre Zuweisungsoperatoren
Ausgaben mit print
Interpolation von skalaren Variablen in Strings
Mit Codepoint Zeichen erzeugen
Präzedenz und Assoziativität der Operatoren
Vergleichsoperatoren
Kontrollstrukturen mit if
Boolesche Werte
Auf Benutzereingaben reagieren
Der chomp-Operator
Kontrollstrukturen mit while
Der Wert undef
Die Funktion defined
Übungen
3. Listen und Arrays
Zugriff auf Arrayelemente
Besondere Arrayindizes
Listenliterale
Die Schreibweise mit qw abkürzen
Listenzuweisung
pop und push
shift und unshift
splice
Interpolation von Arrays in Strings
Kontrollstrukturen mit foreach
Die beliebteste Standardvariable in Perl: $_
Der reverse-Operator
Der sort-Operator
Der each-Operator
Skalarer Kontext und Listenkontext
Ausdrücke, die eine Liste zurückgeben, in skalarem Kontext benutzen
Ausdrücke, die Skalare erzeugen, im Listenkontext benutzen
Skalaren Kontext erzwingen
<STDIN> im Listenkontext
Übungen
4. Subroutinen
Subroutinen definieren
Subroutinen aufrufen
Rückgabewerte
Argumente
Private Variablen in Subroutinen
Parameterlisten mit variabler Länge
Eine bessere &max-Subroutine
Leere Parameterlisten
Anmerkungen zu lexikalischen (my)-Variablen
Das »use strict«-Pragma
Der return-Operator
Das Ampersand-Zeichen weglassen
Nicht-skalare Rückgabewerte
Persistente private Variablen (Zustandsvariablen)
Übungen
5. Eingabe und Ausgabe
Eingaben von der Standardeingabe (STDIN)
Eingaben vom Diamantoperator
Aufrufende Argumente
Ausgaben auf STDOUT
Formatierte Ausgaben mit printf
Arrays und printf
Datei-Handles
Datei-Handles öffnen
binmode auf Datei-Handles anwenden
Schlechte Datei-Handles
Datei-Handles schließen
Schwerwiegende Fehler mit die abfangen
Warnhinweise ausgeben mit warn
Automatisches die-en
Datei-Handles benutzen
Das Standard-Datei-Handle für Ausgaben ändern
Standard-Datei-Handles erneut öffnen
Ausgaben mit say
Datei-Handles in Skalaren
Übungen
6. Hashes
Was ist ein Hash?
Warum einen Hash benutzen?
Zugriff auf Hash-Elemente
Der Hash als Ganzes
Hash-Zuweisung
Der große Pfeil
Hash-Funktionen
Die Funktionen keys und values
Die Funktion each
Typische Anwendung für einen Hash
Die Funktion exists
Die Funktion delete
Interpolation von Hash-Elementen
Der %ENV-Hash
Übungen
7. Die Welt der regulären Ausdrücke
Was sind reguläre Ausdrücke?
Einfache Mustererkennung
Unicode-Eigenschaften
Über Metazeichen
Einfache Quantifier
Muster gruppieren
Alternativen
Zeichenklassen
Abkürzungen in Zeichenklassen
Negierte Abkürzungen
Übungen
8. Mustersuche mit regulären Ausdrücken
Mustervergleiche mit m//
Das Standardverhalten von regulären Ausdrücken ändern
Groß- und Kleinschreibung ignorieren mit /i
Ein beliebiges Zeichen finden mit /s
Leerzeichen einfügen mit /x
Modifier kombinieren
Eine Lesart für Zeichen auswählen
Weitere Option-Modifier
Muster verankern
Wörter verankern
Der Bindungsoperator =~
Variableninterpolation in Suchmustern
Die Speichervariablen
Persistenz des Speichers
Runde Klammern ohne Speicherfunktion
Benannte Speichervariablen
Die automatischen Speichervariablen
Allgemeine Quantifier
Präzedenz
Beispiele für Präzedenz
Und es gibt noch mehr ...
Ein Programm zum Testen von Mustern
Übungen
9. Textbearbeitung mit regulären Ausdrücken
Ersetzungen mit s///
Globales Ersetzen mit /g
Andere Begrenzungszeichen
Ersetzungsmodifier
Der Bindungsoperator
Nichtdestruktive Ersetzung
Groß- und Kleinschreibung ändern
Der split-Operator
Die join-Funktion
m// im Listenkontext
Weitere mächtige reguläre Ausdrücke
Nicht-gierige Quantifier
Treffer in mehrzeiligem Text finden
Mehrere Dateien auf einmal aktualisieren
Editieren an Ort und Stelle von der Kommandozeile aus
Übungen
10. Weitere Kontrollstrukturen
Kontrollstrukturen mit unless
else und unless kombinieren
Kontrollstrukturen mit until
Ausdrücke modifizieren
Nackte Blöcke als Kontrollstrukturen
Die elsif-Klausel
Autoinkrement und Autodekrement
Der Wert von Autoinkrement-Operationen
Kontrollstrukturen mit for
Die geheime Verbindung zwischen foreach und for
Schleifen kontrollieren
Der last-Operator
Der next-Operator
Der redo-Operator
Benannte Blöcke
Der Bedingungsoperator ?:
Logische Operatoren
Der Wert von Short-Circuit-Operatoren
Der Definiert-oder-Operator
Kontrollstrukturen mit teilweise auswertenden Operatoren
Übungen
11. Perl-Module
Module finden
Module installieren
Eigene Verzeichnisse verwenden
Einfache Module benutzen
Das Modul File::Basename
Nur bestimmte Funktionen eines Moduls verwenden
Das Modul File::Spec
Path::Class
CGI.pm
Datenbanken und DBI
Datum und Uhrzeit
Übungen
12. Dateitests
Dateitest-Operatoren
Mehrere Attribute einer Datei auf einmal überprüfen
Dateitests stapeln
Die Funktionen stat und lstat
Die Funktion localtime
Bitorientierte Operatoren
Mit Bitstrings arbeiten
Übungen
13. Zugriff auf Verzeichnisse
Im Verzeichnisbaum navigieren
Globbing
Eine alternative Globbing-Syntax
Verzeichnishandles
Verzeichnisse rekursiv bearbeiten
Dateien und Verzeichnisse bearbeiten
Dateien löschen
Dateien umbenennen
Links und Dateien
Anlegen und Entfernen von Verzeichnissen
Zugriffsrechte ändern
Besitzrechte ändern
Zeitstempel ändern
Übungen
14. Strings und Sortierfunktionen
Substrings finden mit index
Substrings manipulieren mit substr
Daten mit sprintf formatieren
»Geld«-Werte mit sprintf formatieren
Nicht-Dezimalzahlen interpretieren
Fortgeschrittenes Sortieren
Hashes abhängig von den Werten sortieren
Nach mehreren Kriterien sortieren
Übungen
15. Intelligente Vergleiche und given-when
Der Operator für intelligente Vergleiche
Präzedenz bei intelligenten Vergleichen
Die given-Anweisung
»Dumme« Vergleiche
when mit vielen Elementen verwenden
Übungen
16. Prozessverwaltung
Die Funktion system
Die Shell vermeiden
Die Funktion exec
Umgebungsvariablen
Backquotes zum Abfangen von Ausgaben benutzen
Backquotes im Listenkontext benutzen
Externe Prozesse mit IPC::System::Simple
Prozesse als Datei-Handles
Ganz tief unten mit fork
Signale schicken und empfangen
Übungen
17. Fortgeschrittene Perl-Techniken
Fehler mit eval abfangen
Fortgeschrittene Fehlerbehandlung
autodie
Elemente mit grep aus einer Liste filtern
Listenelemente umwandeln mit map
Spezielle Werkzeuge für Listen
Slices
Array-Slices
Hash-Slices
Übung
A. Lösungen zu den Übungen
Lösungen zu den Übungen in Kapitel 1
Lösungen zu den Übungen in Kapitel 2
Lösungen zu den Übungen in Kapitel 3
Lösungen zu den Übungen in Kapitel 4
Lösungen zu den Übungen in Kapitel 5
Lösungen zu den Übungen in Kapitel 6
Lösungen zu den Übungen in Kapitel 7
Lösungen zu den Übungen in Kapitel 8
Lösungen zu den Übungen in Kapitel 9
Lösungen zu den Übungen in Kapitel 10
Lösungen zu den Übungen in Kapitel 11
Lösungen zu den Übungen in Kapitel 12
Lösungen zu den Übungen in Kapitel 13
Lösungen zu den Übungen in Kapitel 14
Lösungen zu den Übungen in Kapitel 15
Lösungen zu den Übungen in Kapitel 16
Lösung zu der Übung in Kapitel 17
B. Über das Lama hinaus
Weiterführende Dokumentation
Reguläre Ausdrücke
Packages
Die Funktionalität von Perl erweitern
Bibliotheken
Module
Module finden und installieren
Eigene Module schreiben
Datenbanken
Direkter Zugriff auf Systemdatenbanken
Zugriff auf textbasierte (»Flatfile«) Datenbanken
Weitere Operatoren und Funktionen
Transliterationen mit tr///
Here-Dokumente
Mathematik
Fortgeschrittene mathematische Funktionen
Abstrakte und komplexe Zahlen
Große Zahlen und Zahlen hoher Präzision
Listen und Arrays
map und grep
Bits und Bytes
Formate
Netzwerke und Interprozess-Kommunikation (IPC)
System V IPC
Sockets
Sicherheit
Debugging
Kommandozeilenoptionen
Eingebaute Variablen
Syntaxerweiterungen
Referenzen
Komplexe Datenstrukturen
Objektorientierte Programmierung
Anonyme Subroutinen und Closures
Gebundene Variablen
Operatoren überladen
Dynamisches Laden
Einbetten
Andere Sprachen nach Perl konvertieren
find-Kommandozeilen nach Perl konvertieren
Kommandozeilenoptionen in Ihren Programmen
Eingebettete Dokumentation
Weitere Möglichkeiten, Datei-Handles zu öffnen
Threads und Forking
Grafische Benutzerschnittstellen (GUIs)
Und mehr ...
C. Das kleine Unicode-ABC
Unicode
UTF-8 & Co.
Alle Beteiligten auf Augenhöhe bringen
Extravagante Zeichen
Noch extravagantere Zeichen
Unicode in Perl verarbeiten
Unicode im Quelltext verwenden
Noch extravagantere Zeichen mit Namen
STDIN oder STDERR lesen bzw. schreiben
Dateien schreiben und lesen
Mit Kommandozeilenargumenten umgehen
Mit Datenbanken umgehen
Weiterführende Literatur
D. Über die Autoren
E. Über den Übersetzer
Stichwortverzeichnis
Kolophon
Willkommen zur 6. Auflage von Einführung in Perl, aktualisiert auf Perl 5.14. Sie können dieses Buch aber auch problemlos benutzen, wenn Sie noch mit Perl 5.8 arbeiten (wobei seine Veröffentlichung mittlerweile schon so lange her ist, dass Sie vielleicht über ein Update nachdenken sollten).
Wenn Sie nach der besten Möglichkeit suchen, die nächsten 30 bis 45 Stunden mit der Programmiersprache Perl zu verbringen, hat Ihre Suche hier ein Ende. Auf den folgenden Seiten finden Sie eine sorgfältig abgestimmte Einleitung in die Sprache, die als das »Arbeitspferd des Internet« sowie als die Sprache der Wahl bei Systemadministratoren, Web-Hackern und Gelegenheitsprogrammierern auf der ganzen Welt gilt.
Wir können Ihnen natürlich nicht den gesamten Umfang von Perl in ein paar Stunden beibringen. Bücher, die Ihnen das versprechen, übertreiben ein bisschen. Stattdessen haben wir sorgfältig einen nützlichen Querschnitt von Perl für Sie ausgewählt. Dieser reicht aus, um Anwendungen mit einer Länge von einer bis zu 128 Zeilen zu schreiben, die ungefähr 90% aller Programme ausmachen. Wenn Sie dieses Buch durchgearbeitet haben, können Sie sich das Alpaka-Buch besorgen, das dort anschließt, wo das Ihnen hier vorliegende Lama-Buch aufhört. Wir haben außerdem eine Reihe von weiterführenden Hinweisen mit aufgenommen, die Ihnen weiterhelfen sollen, wenn Sie sich mit spezielleren Perl-Themen befassen wollen.
Jedes Kapitel ist kurz genug, um in einer bis zwei Stunden gelesen zu werden, und endet mit einer Reihe von Übungen, die Ihnen helfen sollen, das Gelernte anzuwenden. Die Antworten haben wir für Sie zur Überprüfung in Anhang A zusammengestellt. Dieses Buch ist also ideal für Perl-Einführungskurse und -seminare geeignet. Wir wissen dies aus erster Hand, da das Material für dieses Buch fast Wort für Wort aus dem Konzept für unseren Perl-Einführungskurs stammt, den mittlerweile Tausende von Kursteilnehmern in aller Welt absolviert haben. Dennoch ist dieses Buch natürlich auch für das Selbststudium geeignet.
Perl wird oft als der »Werkzeugkasten für Unix« bezeichnet, aber Sie müssen kein Unix-Guru sein, nicht einmal Unix-Benutzer, um mit diesem Buch Perl lernen zu können. Sofern es nicht extra vermerkt ist, gilt alles, was wir sagen, auch für die Windows-Version ActivePerl von ActiveState und für andere moderne Implementierungen von Perl.
Auch wenn Sie zu Beginn der Lektüre dieses Buchs keinerlei Ahnung von Perl haben müssen, ist es empfehlenswert, sich bereits mit grundsätzlichen Konzepten des Programmierens auszukennen. Hierzu zählen etwa Variablen, Schleifen, Unterroutinen, Arrays und das ganz wichtige »eine Quellcode-Datei mit Ihrem Lieblings-Texteditor bearbeiten«. Diese Konzepte setzen wir voraus. Auch wenn es uns freut zu hören, dass der eine oder andere mit diesem Buch Perl als erste Programmiersprache gelernt hat, können wir nicht allen Lesern versprechen, dass sie das ebenfalls hinbekommen.
Die folgenden typografischen Konventionen werden in diesem Buch verwendet:
Nichtproportionalschrift
wird für Namen von Methoden, Funktionen, Variablen und Attributen sowie für Codebeispiele verwendet.
Nichtproportionalschrift fett
wird verwendet, wenn User-Eingaben dargestellt werden sollen.
Nichtproportionalschrift kursiv
steht für austauschbare Codeelemente (zum Beispiel Dateiname
, wenn der tatsächliche Dateiname eingesetzt werden soll).
Kursivschrift
wird benutzt für Dateinamen, URLs, Rechnernamen, wichtige Begriffe bei ihrer ersten Erwähnung und zur Hervorhebung von Textteilen.
Fußnoten
enthalten zusätzliche Anmerkungen, die Sie beim ersten Lesen dieses Buchs nicht mitlesen sollten (sondern vielleicht beim zweiten oder dritten Mal). Manchmal wird im Text bewusst ein wenig die Unwahrheit gesagt, um die Erklärungen zu vereinfachen, und eine Fußnote stellt dann alles wieder richtig. Oft enthalten Fußnoten auch Hinweise auf weiterführendes Material, das in diesem Buch gar nicht weiter behandelt wird.
[2], [5] usw.
am Anfang der Texte zu den Übungen stellen grobe Schätzungen dar, wie viele Minuten Sie voraussichtlich mit der jeweiligen Übung verbringen werden.
Dieses Buch soll Ihnen dabei helfen, Ihre Arbeit zu erledigen. Sie können den Code aus diesem Buch benutzen und an Ihre eigenen Bedürfnisse anpassen. Wir empfehlen Ihnen allerdings, ihn nicht von Hand zu kopieren, sondern unter http://www.learning-perl.com herunterzuladen.
Den Code, den wir hier zeigen, dürfen Sie im Allgemeinen in Ihren Programmen und in Ihrer Dokumentation verwenden. Sie brauchen uns nicht um Genehmigung bitten, sofern Sie nicht große Teile des Codes reproduzieren. Wenn Sie zum Beispiel ein Programm schreiben, das mehrere Codestücke aus diesem Buch wiederverwendet, brauchen Sie uns nicht um Erlaubnis zu bitten, wenn Sie jedoch eine CD mit Codebeispielen aus O’Reilly-Büchern verkaufen oder vertreiben wollen, müssen Sie eine Genehmigung einholen. Eine Frage mit einem Zitat aus diesem Buch und seinen Codebeispielen zu beantworten erfordert keine Erlaubnis, aber es ist ohne Genehmigung nicht gestattet, große Teile unseres Textes oder Codes in eine eigene Produktdokumentation aufzunehmen.
Wir freuen uns über eine Quellenangabe, verlangen sie aber nicht unbedingt. Zu einer Quellenangabe gehören normalerweise Autor, Titel, Verlag und ISBN, zum Beispiel so: »Randal L. Schwartz, Tom Phoenix & brian d foy: Einführung in Perl, 6. Auflage, O’Reilly Verlag 2011, ISBN 978-3-868 99-145-1«.
Für die Neugierigen unter Ihnen folgt nun Randals Version der Entstehungsgeschichte dieses Buchs.
Nachdem Larry Wall und ich 1991 mit der Arbeit an der 1. Auflage von Programming perl fertig waren, wurde ich von der Firma Taos Mountain Software im Silicon Valley angesprochen, einen Perl-Kurs zu entwickeln. Hierzu gehörte auch das erste Dutzend Kurse, um Ausbilder dieser Firma auszubilden, diesen Kurs zu halten. Ich schrieb also diesen Kurs und gab ihn, wie vereinbart, an die Firma[1] weiter.
Als ich den Kurs das dritte oder vierte Mal hielt (Ende 1991), kam jemand auf mich zu und sagte: »Weißt du, ich finde ja Programming Perl wirklich gut, aber die Art, wie das Material hier im Kurs aufbereitet wird, ist viel leichter nachzuvollziehen. Du solltest ein Buch schreiben, das wie dieser Kurs aufgebaut ist.« Das schien mir eine gute Idee, und so begann ich, darüber nachzudenken.
Ich schrieb an Tim O’Reilly und schlug ihm ein Buch vor, das sich in den Grundzügen an dem Kurs orientierte, den ich für Taos entwickelt hatte. Allerdings habe ich einige Kapitel, nach Beobachtungen im Kursraum, etwas umstrukturiert und geändert. Ich glaube, schneller ist noch nie ein Buchvorschlag von mir angenommen worden: Bereits 15 Minuten später erhielt ich eine Nachricht von Tim: »Wir haben schon darauf gewartet, dass du ein zweites Buch einreichst – Programming perl verkauft sich wie verrückt.« Die folgenden 18 Monate verbrachte ich dann damit, die 1. Auflage von Learning Perl fertig zu stellen.
Während dieser Zeit begann ich, eine Gelegenheit zu sehen, Perl auch außerhalb des Silicon Valley[2] zu lehren. Also entwickelte ich einen Kurs, der auf dem Text basierte, den ich für Learning Perl geschrieben hatte. Ich gab ein Dutzend Kurse für verschiedene Kunden (unter anderem auch für meinen Hauptauftraggeber, Intel Oregon) und benutzte die Rückmeldungen, die ich bekam, um der Rohfassung des Buchs den letzten Schliff zu geben.
Die 1. Auflage kam am 1. November 1993[3] in die Läden und wurde zu einem überwältigenden Erfolg, dessen Verkaufszahlen oft sogar die von Programming perl übertrafen.
Auf der Rückseite der 1. Auflage stand zu lesen: »Geschrieben von einem der führenden Perl-Trainer«. Das wurde schnell zu einer sich selbst erfüllenden Prophezeiung. Innerhalb von wenigen Monaten bekam ich E-Mails von Leuten überall aus den USA, die mich darum baten, für ihre Firmen Kurse zu geben. Während der folgenden sieben Jahre entwickelte sich meine Firma zum weltweiten Marktführer für Perl-Training vor Ort, und ich sammelte eine Million Vielflieger-Meilen. Es kam auch nicht ungelegen, dass es während dieser Zeit so richtig mit dem Web losging. Bei Webmastern und -meisterinnen wurde Perl die bevorzugte Sprache für Content-Management, Benutzerinteraktion mit CGI und die Pflege von Sites.
Zwei Jahre arbeitete ich bei Stonehenge ziemlich eng mit Tom Phoenix zusammen. Ich gab ihm Freiraum, mit dem »Lama«-Kurs herumzuexperimentieren, einige Dinge umzustellen und anders aufzuteilen. Als wir mit dem fertig waren, was wir als die beste große Revision dieses Kurses ansahen, rief ich Tim O’Reilly an und sagte: »Zeit für ein neues Buch!« Das Ergebnis war die 3. Auflage dieses Buchs.
Zwei Jahre nach der 3. Auflage des Lama-Buchs beschlossen Tom und ich, dass es an der Zeit sei, auch unseren Fortgeschrittenen-Kurs als Buch herauszubringen. Und so entstand das Alpaka-Buch, Einführung in Perl-Objekte, Referenzen & Module, das 2004 erschien (www.oreilly.de/catalog/lrnperlormger/).
Zu dieser Zeit kam unser Kollege brian d foy vom Einsatz im Golfkonflikt zurück; ihm war aufgefallen, dass beide Bücher ein wenig Anpassung gebrauchen konnten, um die veränderten Bedürfnisse der Leser bzw. Lernenden besser zu berücksichtigen. Also schlug er O’Reilly vor, Lama und Alpaka noch ein (hoffentlich) letztes Mal vor Perl 6 in einer neuen Auflage herauszugeben. Die vorliegende Auflage von Einführung in Perl spiegelt diese Veränderungen wider. brian war dabei der Hauptautor und hat großartige Arbeit geleistet, das Team aus mehreren Autoren zu organisieren.
Am 18. Dezember 2007 veröffentlichten die Perl-Portierer Perl 5.10, eine bedeutsame neue Version mit zahlreichen neuen Features. Bei der Vorgängerversion 5.8 war es hauptsächlich um Unicode-Unterstützung gegangen. Die neue Version, die auf der stabilen 5.8 aufbaute, hatte ganz neue Features zu bieten, von denen einige schon aus der Entwicklung des noch nicht veröffentlichten Perl 6 stammten. Ein paar dieser Features, zum Beispiel benannte Captures in regulären Ausdrücken, sind in ihrer Funktionsweise den alten haushoch überlegen und dadurch ideal für Perl-Anfänger. Wir hatten nie eine fünfte Auflage dieses Buches geplant, aber Perl 5.10 hat so viele neue Features zu bieten, dass wir einfach nicht widerstehen konnten.
Seitdem ist Perl fortlaufend verbessert worden und hat einen regelmäßigen Release-Zyklus aufzuweisen. Wir hatten keine Gelegenheit dazu, das Buch für Perl 5.12 zu überarbeiten, weil die Entwicklung zu schnell voranging. Wir freuen uns, Ihnen die vorliegende Überarbeitung für Perl 5.14 präsentieren zu können, und können selbst kaum fassen, dass es jetzt schon die 6. Auflage gibt.
[1] In dem Vertrag behielt ich mir die Rechte an den Übungen vor, in der Hoffnung, diese eines Tages woanders, etwa in den Zeitschriftenkolumnen, die ich zu der Zeit schrieb, wiederverwenden zu können. Die Übungen sind das Einzige, das aus dem Taos-Kurs in diesem Buch verwendet wird.
[2] Mein Vertrag mit Taos enthielt eine Klausel, nach der ich meinem Auftraggeber keine Konkurrenz machen durfte. Ich musste mich also vom Silicon Valley fern halten, was ich auch viele Jahre lang respektiert habe.
[3] An diesen Tag erinnere ich mich gut – es war der Tag, an dem man mich zu Hause wegen Computeraktivitäten im Zusammenhang mit meinem Intel-Vertrag verhaftete. Es wurde eine Reihe von Anklagen erhoben, für die ich später auch verurteilt wurde. Details finden Sie unter http://www.lightlink.com/fors/.
Ihnen werden vermutlich einige Unterschiede zur letzten Auflage auffallen. Der Text wurde auf Perl 5.14 aktualisiert. Einiger Code in diesem Buch funktioniert nur mit dieser Version. Wir weisen im Text darauf hin, wenn wir über Perl 5.14-Features sprechen, und die entsprechenden Codeabschnitte sind mit einem use
-Statement markiert, damit Sie auch die richtige Version verwenden:
use 5.014; # dieses Skript setzt Perl 5.14 oder höher voraus
Wenn Sie nicht diesen Hinweis vorfinden, sollte der Code bis hinunter zu Perl 5.8 lauffähig sein. Um in Erfahrung zu bringen, mit welcher Perl-Version Sie arbeiten, verwenden Sie folgenden Befehl:
$ perl -v
Hier ist eine Liste mit einigen der neuen Features in Perl 5.14, die behandelt werden. Wo es angebracht ist, erklären wir aber auch, wie man dasselbe in älteren Versionen bewerkstelligt.
Wir geben an geeigneten Stellen auch Unicode-Beispiele und -Features mit an. Für den Fall, dass Sie noch nicht damit begonnen haben, mit Unicode herumzuprobieren, finden Sie in Anhang C eine kleine Einführung in das Thema. Irgendwann müssen Sie sowieso in den sauren Apfel beißen, also warum nicht einfach jetzt? Um Unicode geht es hier und da überall in diesem Buch, vor allem aber in den Kapiteln über Skalare (Kapitel 2), Input/Output (Kapitel 5) und Sortieren (Kapitel 14).
Die Kapitel über reguläre Ausdrücke sind ausführlicher als zuvor und umfassen die neuen Features in Perl 5.14, die Case-Folding in Unicode betreffen. Bei den Operatoren in regulären Ausdrücken gibt es die neuen Switches /a
, /u
und /l
. Wir behandeln jetzt auch das Matching nach Unicode-Eigenschaften mit den Features \p{}
und \P{}
von regulären Ausdrücken.
In Perl 5.14 wurde ein nichtdestruktiver Ersetzungsoperator hinzugefügt (Kapitel 9), der sich als wirklich praktisch erwiesen hat.
Intelligentes Matching und given-when
haben sich seit ihrer Einführung mit Perl 5.10 etwas verändert. Deshalb haben wir Kapitel 15 ein wenig verändert, um auch die neuen Regeln abzudecken.
Wir haben Kapitel 11, Perl-Module, aktualisiert und erweitert, um die neuesten Änderungen mit hineinzunehmen, unter anderem das Zeroconf-Werkzeug cpanm. Außerdem wurden einige Modulbeispiele hinzugefügt.
Einige der Punkte, die bislang in Anhang B bei den »fortgeschrittenen, aber nicht beschriebenen Features« zu finden waren, sind in den Haupttext aufgenommen worden. Besonders erwähnenswert sind hier die Verwendung des »dicken Pfeils« => in Hashes (Kapitel 6) und die Verwendung von splice
in Listen und Arrays (Kapitel 3).
Ich möchte mich bei den früheren und jetzigen Stonehenge-Trainern (Joseph Hall, Tom Phoenix, Chip Salzenberg, brian d foy und Tad McClellan) für ihre Bereitschaft bedanken, hinauszugehen und Woche für Woche vor den Kursteilnehmern zu stehen, um mit ihren Notizen zurückzukommen und zu berichten, was funktioniert hat und was nicht, damit wir das Material für dieses Buch feiner abstimmen konnten. Besonders hervorheben möchte ich meinen Mitautor und Geschäftspartner Tom Phoenix dafür, dass er viele Stunden daran gearbeitet hat, den Lama-Kurs zu verbessern und das hervorragende Grundgerüst für den größten Teil dieses Buchs zu erstellen. Danke an brian d foy, der ab der 4. Auflage Hauptautor wurde und mich damit von diesem ewigen To-do-Eintrag in meiner Inbox befreit hat.
Ein Dankeschön auch an alle bei O’Reilly, insbesondere an unsere geduldige Lektorin Allison Randal (mit der ich nicht verwandt bin, aber sie hat natürlich einen wunderbaren Nachnamen), den derzeit verantwortlichen Lektor Simon St. Laurent sowie Tim O’Reilly, der mir überhaupt die Gelegenheit zu dem Kamel- und dem Lama-Buch eröffnet hatte.
Ich stehe außerdem in der Schuld bei den Tausenden von Leuten, die die letzten Auflagen des Lama-Buchs gekauft haben, so dass ich weder unter der Brücke noch im Gefängnis gelandet bin. Außerdem danke ich meinen Kursteilnehmern, die mir beigebracht haben, ein besserer Kursleiter zu sein. Des Weiteren danke ich der erstaunlichen Anzahl von Fortune-1000-Kunden, die unsere Kurse in der Vergangenheit gebucht haben und dies auch in Zukunft tun werden.
Wie immer, ein besonderes Dankeschön an Lyle und Jack dafür, dass sie mir fast alles beigebracht haben, was ich über das Schreiben weiß.
Ich schließe mich Randals Dank an alle bei O’Reilly an. Für die 3. Auflage war Linda Mui unsere Lektorin, und ich bin ihr immer noch dankbar für die Geduld, die sie bewies, während sie uns dazu brachte, die allzu übertriebenen Witze und Fußnoten rauszuwerfen; gleichzeitig muss ich betonen, dass sie keinerlei Schuld für die verbliebenen Albernheiten trifft. Linda und Randal führten mich durch den Schreibprozess, wofür ich ihnen dankbar bin. Später übernahm dann Allison Randal die Aufgabe der Lektorin, und mittlerweile ist es Simon St. Laurent. Diesen beiden gilt mein Dank für ihre ganz besonderen Beiträge.
Außerdem schließe ich mich Randal an, was die anderen Stonehenge-Trainer angeht, aber auch ihn selbst: Sie haben sich so gut wie nie darüber beklagt, wenn ich unerwartet das Kursmaterial verändert habe, um eine neue Lehrmethode auszuprobieren. Ihr habt eine Menge verschiedene Perspektiven hinsichtlich der Lehrmethoden beigetragen, die ich ohne euch nie kennengelernt hätte.
Ich arbeitete viele Jahre am Oregon Museum of Science and Industry (OMSI) und ich möchte euch allen danken, dass ich meine Lehrmethoden verbessern durfte, indem ich lernte, einen oder zwei Witze in jede nur mögliche Tätigkeit einzubauen.
Danke auch an die vielen Leute im Usenet, die ihr mir eure Wertschätzung und Aufmunterungen für meine Beiträge dort gezeigt habt. Wie immer hoffe ich, es hilft.
Auch den vielen Studenten gilt Dank, die mir mit ihren Fragen (und ihren verdatterten Gesichtern) gezeigt haben, wann ich nach einer anderen Möglichkeit suchen musste, ein bestimmtes Konzept zu erklären. Ich hoffe, dass das vorliegende Buch jede noch verbliebene Verwirrung auflöst.
Selbstverständlich gilt meine tiefe Dankbarkeit insbesondere meinem Koautor Randal, der mir die Freiheit gab, verschiedene Arten auszuprobieren, das Material sowohl im Kurs als auch hier im Buch zu präsentieren. Außerdem danke ich ihm für seine Initiative, dieses Material überhaupt als Buch herauszubringen. Ich bin schwer beeindruckt von deinen Anstrengungen sicherzustellen, dass niemand anders in die rechtlichen Schwierigkeiten gerät, die so viel von deiner Zeit und Energie gestohlen haben; du bist ein gutes Vorbild.
Ich habe zuerst Randal zu danken, da ich Perl mithilfe der 1. Auflage dieses Buchs erlernte. 1998 musste ich es noch einmal erlernen, als er mich bat, als Lehrer für Stonehenge zu arbeiten. Lehren ist oft der beste Weg, etwas zu lernen. Seit dieser Zeit ist Randal mein Mentor für Perl und viele andere Dinge, von denen er meinte, dass ich sie lernen sollte – zum Beispiel zu der Zeit, als er entschied, dass wir für eine Demonstration auf einer Webkonferenz Smalltalk an Stelle von Perl verwenden sollten. Ich bin immer wieder überrascht über die Vielfalt seines Wissens. Er hat mir Perl beigebracht, und jetzt helfe ich selbst bei dem Buch mit, mit dem ich einst begonnen hatte. Ich fühle mich sehr geehrt, Randal.
Während der ganzen Zeit, als ich für Stonehenge arbeitete, habe ich Tom Phoenix wahrscheinlich insgesamt höchstens zwei Wochen gesehen, aber ich unterrichte schon seit Jahren seine Version des Perl-Einführungskurses. Diese Version stellte die Grundlage für die 3. Auflage dieses Buchs dar. Dadurch, dass ich diesen Kurs unterrichte, habe ich neue Möglichkeiten gefunden, so gut wie alles zu erklären, und sogar noch die eine oder andere Ecke von Perl genauer kennengelernt.
Als ich Randal davon überzeugte, dass meine Mitarbeit bei der Aktualisierung des Lama-Buchs von Vorteil sein würde, wurde mir die Verantwortung für das Proposal an den Verlag, die Gliederung der neuen Auflage und das Managen der Manuskriptversionen übertragen. Unsere Lektorin Allison Randal half mir bei all dem sehr und ertrug meine ständigen E-Mails ohne Klagen. Nach ihrem Aufbruch zu neuen Ufern hat Simon St. Laurent uns als Lektor und Insider bei O’Reilly sehr geholfen und immer die richtige Mondphase abgewartet, um eine weitere Überarbeitung anzuregen.
Danke unseren Fachkorrektoren David H. Adler, Alan Haggai Alavi, Andy Armstrong, Dave Cross, Chris Devers, Paul Fenwick, Stephen Jenkins, Matthew Musgrove, Jacinta Richardson, Steve Peters, Peter Scott, Wil Wheaton und Karl Williamson für ihre Anmerkungen zu unserem Manuskript.
Danke auch an die vielen Kursteilnehmer, die uns mitgeteilt haben, welche Teile des Kursmaterials über die Jahre verbesserungswürdig waren. Euretwegen sind wir heute so stolz darauf.
Danke auch an die vielen Perl Mongers, die uns ein Zuhause gegeben haben, wenn wir ihre Städte besucht haben. Lasst es uns irgendwann wiederholen.
Und schließlich gilt unser aufrichtigster Dank unserem Freund Larry Wall dafür, dass er die Weisheit besaß, seine wirklich coolen und mächtigen Werkzeuge dem Rest der Welt zugänglich zu machen, damit wir alle unsere Arbeit ein bisschen schneller, leichter und mit mehr Spaß erledigen können.
Willkommen zum Lama-Buch!
Dies ist die 6. Auflage eines Buchs, in dessen Genuss seit 1993 über eine halbe Million Leser gekommen sind. Wir hoffen zumindest, dass sie es genossen haben. Uns hat es jedenfalls Spaß gemacht, es zu schreiben.[4]
Wahrscheinlich haben Sie einige Fragen zu Perl, und vielleicht auch einige zu diesem Buch, besonders wenn Sie schon ein wenig herumgeblättert haben, um zu sehen, was dieses Buch so alles bietet. Wir werden daher dieses Kapitel dazu benutzen, Ihre Fragen zu beantworten bzw. Ihnen zu erzählen, wo Sie Antworten herbekommen, die nicht in diesem Buch stehen.
Wenn Sie und wir uns auch nur ein wenig ähnlich sind, dann stehen Sie vermutlich jetzt in einem Buchladen[5] und fragen sich, ob Sie dieses Lama-Buch kaufen und Perl lernen sollen oder das Buch da drüben, um eine Sprache zu lernen, die nach einer Schlange[6] benannt ist, nach einem Getränk oder einem Buchstaben des Alphabets. Sie haben genau zwei Minuten Zeit, bevor der Verkäufer herüberkommt, um Ihnen zu sagen, dass das hier keine Bibliothek sei,[7] und Sie auffordert, entweder etwas zu kaufen oder den Laden zu verlassen. Vielleicht wollen Sie die zwei Minuten nutzen, um ein kurzes Perl-Programm zu sehen, anhand dessen Sie erkennen können, was Perl so alles kann. In diesem Fall sollten Sie die Perl-Blitztour weiter hinten in diesem Kapitel mitmachen.
Das hier ist kein Nachschlagewerk. Es ist eine Einführung in die Grundlagen von Perl, das Ihnen gerade das Nötigste vermittelt, um einfache Programme für den Hausgebrauch zu schreiben. Wir behandeln nicht alle Details eines jeden Themas, und wir verteilen einige der Themen über mehrere Kapitel, so dass Sie mit bestimmten Konzepten jeweils dort vertraut gemacht werden, wo Sie sie auch brauchen.
Wir schreiben für Leser, die schon das eine oder andere übers Programmieren wissen und jetzt Perl lernen möchten. Wir gehen davon aus, dass Sie sich schon einigermaßen damit auskennen, wie man ein Terminal benutzt, Dateien editiert und Programme laufen lässt – aber eben nicht mit Perl-Programmen. Sie wissen, was Variablen, Subroutinen usw. sind, aber Sie wollen wissen, wie so etwas in Perl funktioniert.
Das heißt nicht, dass Sie als blutiger Anfänger, der noch nie ein Terminal-Programm angesehen oder eine Codezeile geschrieben hat, durchgehend Bahnhof verstehen werden. Sie werden vielleicht nicht alles verstehen, was wir schreiben, wenn Sie das Buch das erste Mal durchgehen, aber eine Menge Anfänger haben dieses Buch schon zum Lernen benutzt, ohne völlig zu verzweifeln. Der Trick besteht darin, sich keine Gedanken um all das zu machen, was man vielleicht nicht versteht, sondern sich stattdessen einfach auf die grundlegenden Konzepte zu konzentrieren, die wir vorstellen. Sie werden vielleicht etwas länger brauchen als ein erfahrener Programmierer, aber irgendwo müssen Sie ja anfangen.
Und: Das hier sollte nicht das einzige Perl-Buch sein, das Sie jemals lesen. Es ist nur eine Einführung und bei Weitem nicht umfassend. Es ist eine erste Starthilfe, um Sie auf den richtigen Weg zu bringen, damit Sie dann, wenn Sie so weit sind, mit unseren anderen Büchern weitermachen können: Intermediate Perl (deutsch: Einführung in Perl-Objekte, Referenzen & Module, zurzeit nur als E-Book erhältlich – bekannt als das »Alpaka-Buch«) und Mastering Perl. Das maßgebliche Nachschlagewerk zu Perl ist Programming Perl, das auch das »Kamel-Buch« genannt wird (deutsch: Programmieren mit Perl; zurzeit nur als E-Book erhältlich).
Wir möchten außerdem anmerken, dass dieses Buch zwar Perl bis Version 5.14 behandelt, aber auch nutzbringend verwendet werden kann, wenn Sie eine frühere Version benutzen. Dann verpassen Sie vielleicht ein paar coole neue Features, aber auf jeden Fall lernen Sie die grundlegende Verwendung von Perl kennen. Die älteste Version, die wir in unsere Überlegungen mit einbeziehen werden, ist Perl 5.8, obwohl es vor fast zehn Jahren veröffentlicht wurde.
Danke, dass Sie das bemerkt haben. Es gibt eine Menge Fußnoten in diesem Buch. Ignorieren Sie sie. Die Fußnoten werden gebraucht, weil Perl eine ganze Reihe von Ausnahmen zu seinen Regeln hat. Das ist eine gute Sache, da das reale Leben auch voller Ausnahmen ist.
Das hat zur Folge, dass wir nicht ohne zu lügen sagen können: »Der fitzbin-Operator frobniziert die husistatische Variable.«, ohne die Ausnahmen[8] in einer Fußnote zu erläutern. Da wir ziemlich ehrliche Leute sind, müssen wir also eine Menge Fußnoten schreiben. Sie dagegen können ehrlich sein, ohne die Fußnoten lesen zu müssen (witzig, wie sich das ergibt). Die Fußnoten bieten zusätzliche Informationen, die Sie für die Grundkonzepte nicht benötigen.
Viele der Ausnahmen haben mit der Portierbarkeit des Codes zu tun. Die Geschichte von Perl begann auf Unix-Systemen und ist dort auch heute noch ziemlich tief verwurzelt. Wo immer es möglich war, haben wir versucht, auf unerwartetes Verhalten hinzuweisen, egal ob es daher rührt, dass ein Programm auf einem Nicht-Unix-System laufen soll, oder auf einem anderen Grund beruht. Wir hoffen, dass dieses Buch auch für unsere Leser, die nichts über Unix wissen, eine gute Einführung in Perl darstellt. (Und die werden nebenbei noch etwas über Unix lernen – ohne Extrakosten, versteht sich.)
Außerdem folgen die meisten Ausnahmen der alten »80/20«-Regel, die besagt, dass 80% des Verhaltens von Perl in 20% der Dokumentation beschrieben werden kann. Die übrigen 20% des Verhaltens nehmen dafür die verbleibenden 80% der Dokumentation ein. Um dieses Buch also übersichtlich zu halten, besprechen wir im Haupttext die gängigsten und leicht erklärbaren Anwendungsformen. In den Fußnoten (die außerdem eine kleinere Schrift verwenden, so dass wir bei gleichem Platzverbrauch mehr sagen können)[9] gehen wir dann auf die anderen Dinge ein. Wenn Sie das Buch zum ersten Mal ganz durchgelesen haben, ohne dabei die Fußnoten mitzulesen, werden Sie sich vermutlich einige Abschnitte zur Vertiefung noch einmal ansehen wollen. Wenn Sie an diesem Punkt angekommen sind oder die Neugier beim Lesen einfach zu groß wird, können Sie die Fußnoten lesen. Ein Großteil sind sowieso nur Informatikerwitze.
Die Übungen finden Sie jeweils am Ende jedes Kapitels. Sie basieren auf den Erfahrungen, die wir mit diesem Kursmaterial bereits vor tausenden[10] von Kursteilnehmern gemacht haben. Wir haben diese Übungen sorgfältig zusammengestellt, um Ihnen die Gelegenheit zu geben, auch einmal Fehler zu machen.
Nicht dass wir wollen, dass Sie Fehler machen, aber Sie brauchen die Gelegenheit dazu. Die meisten dieser Fehler werden Ihnen während Ihrer Perl-Karriere begegnen, warum also nicht gleich jetzt? Jeden Fehler, den Sie beim Lesen dieses Buchs begehen, machen Sie nicht noch einmal, wenn Sie unter Zeitdruck ein Programm schreiben müssen. Außerdem sind wir, falls einmal etwas schiefgehen sollte, die ganze Zeit bei Ihnen. Anhang A, enthält unsere Lösungen für jede Übung und bespricht die Fehler, die Sie gemacht haben, sowie ein paar Fehler, die Sie nicht gemacht haben. Sehen Sie sich diese Lösungen und Erläuterungen an, wenn Sie die Übungen erledigt haben.
Aber schlagen Sie die Antwort nicht nach, bevor Sie nicht ernsthaft versucht haben, selbst auf die Lösung zu kommen. Ihr Lernerfolg wird besser sein, wenn Sie die Lösung von sich aus finden, als wenn Sie sie einfach nachlesen. Schlagen Sie Ihren Kopf nicht gegen die Wand, wenn Sie mal eine Aufgabe nicht lösen können. Ärgern Sie sich nicht und machen Sie einfach mit dem nächsten Kapitel weiter.
Selbst wenn Sie überhaupt keine Fehler machen, sollten Sie sich die Antworten ansehen, wenn Sie mit der Übung fertig sind. Der Begleittext zeigt einige Details der Übungsprogramme auf, die auf den ersten Blick vielleicht nicht ganz so offensichtlich sind.
Wenn Sie gern zusätzliche Übungen machen möchten, probieren Sie es mit dem englischsprachigen Learning Perl Student Workbook, in dem zu jedem der Kapitel mehrere weitere Übungen angefügt sind.
Jeder Übung ist vor dem Text eine Zahl in eckigen Klammern vorangestellt:
[2] Was bedeutet die Zahl 2, die am Anfang einer Übung steht?
Diese Zahl ist unsere (grobe) Schätzung, wie viele Minuten Sie in etwa für das Absolvieren einer Übung brauchen werden. Seien Sie bitte nicht überrascht, wenn Sie (inklusive des Schreibens, Testens und Debuggens) nur die halbe Zeit benötigen oder auch nach mehr als der doppelten Zeit noch nicht fertig sind. Wenn Sie allerdings wirklich nicht weiterkommen, werden wir natürlich nicht verraten, dass Sie in Anhang A nachgesehen haben, wie die Antwort lautet.
Wenn Sie Perl-Kurse leiten und sich entschieden haben, dieses Buch im Kurs einzusetzen (wie es schon viele andere getan haben), sollten Sie wissen, dass wir jeden Übungsblock so konzipiert haben, dass die meisten Schüler in 45 bis 60 Minuten damit fertig sind und noch etwas Zeit für eine Pause bleibt. Die Übungen einiger Kapitel brauchen weniger Zeit, andere dauern womöglich etwas länger. Nachdem wir den Übungen diese kleinen Zahlen in den eckigen Klammern vorangestellt hatten, wussten wir plötzlich einfach nicht mehr, wie wir sie zusammenzählen sollten. (Glücklicherweise wissen wir, wie wir das von Computern erledigen lassen können.)
Es gibt von uns ein begleitendes englischsprachiges Buch, das Learning Perl Student Workbook, in dem Sie zu jedem der Kapitel zusätzliche Übungen finden. Wenn Sie sich das Workbook zur vierten Auflage besorgen, müssen Sie für sich die Kapitelreihenfolge ändern, weil wir in der vorliegenden Auflage ein Kapitel hinzugefügt und ein anderes verschoben haben.
[4] Um sicherzugehen: Die 1. Auflage wurde von Randal L. Schwartz geschrieben, die 2. von Randal und Tom Christiansen, die 3. Auflage von Randal und Tom Phoenix und die letzten drei von Randal, Tom Phoenix und brian d foy. Wenn wir also »wir« sagen, meinen wir die letzte Gruppe. Wenn Sie sich nun fragen, warum es uns Spaß gemacht hat (in der Vergangenheitsform), dieses Buch zu schreiben, obwohl wir uns noch auf der ersten Seite befinden, ist die Antwort leicht: Wir haben hinten angefangen und uns dann nach vorne vorgearbeitet. Das mag jetzt zwar etwas seltsam klingen, aber um ehrlich zu sein, war der Rest einfach, als der Index erst einmal fertig war.
[5] Wenn Sie und wir uns tatsächlich ähnlich sind, stehen Sie jetzt eher in einer Bücherei und nicht in einem Buchladen. Aber wir wollen ja nicht kleinlich sein.
[6] Bevor Sie uns jetzt schreiben, um uns mitzuteilen, dass es sich eigentlich um eine Comedy-Truppe handelt, sollten wir Ihnen vielleicht erklären, dass wir – mit einem Buchstabendreher – eigentlich CORBA meinen.
[7] Es sei denn, es ist wirklich eine.
[8] Außer dienstags während eines Stromausfalls, wenn Sie bei Tag-und-Nacht-Gleiche Ihren Ellenbogen verdrehen oder wenn bei einer Perl-Version vor 5.12 use integer
innerhalb eines von einer Prototyp-Subroutine aufgerufenen Schleifenblocks benutzt wird.
[9] Wir haben uns sogar überlegt, das ganze Buch als Fußnote zu konzipieren, um die Seitenzahl klein zu halten. Wir haben diese Idee jedoch wieder verworfen, weil uns Fußnoten mit Fußnoten dann doch ein bisschen zu verrückt vorkamen.
[10] Natürlich nicht gleichzeitig.