Nächstes Kapitel: Variablen in Perl
|
Einführung in die
|
Perl steht für "Practical Extraction and Report Language" und wurde von Larry Wall im Zuge einer an ihn gestellten Aufgabe entwickelt. Grundgedanke war die Vereinigung von hervorragenden Unix-Utilities wie sed, awk, ... und Shellfähigkeiten wie die der sh, csh, bash, ... in einem Programm.
Perl kann war ursprünglich besonders auf die Verarbeitung von Textdateien abgestimmt. Die Abarbeitung von Log-Dateien um kumulierte Berichte zu erstellen war schon immer eine Perl-Domäne. Aber auch in der Systemverwaltung können mit Perl eine Fülle von Tätigkeiten sehr elegant bewältigt werden. Somit gehört es heute zur Standardausstattung von Unix-Systemen und findet zunehmend auch auf WinNT oder Win2000 seinen Einsatz.
Damit sind aber bei weitem noch nicht alle Möglichkeiten ausgeschöpft. Im Internet (speziell dem Comprehensive Perl Archive Network, kurz CPAN) finden sich eine Unmenge an frei verfügbaren Bibliotheken - den Perl Modulen. In Deutschland ist eine gut angebunde ftp-Site die der Uni Hamburg unter ftp.uni-hamburg.de.
Es handelt sich aus Sicht des Anwenders um eine Interpretersprache. Programme werden ähnlich wie MS-DOS-Batch-Programme oder Unix/Linux-Shell-Skripte in Form einer Textdatei erstellt. Im Gegensatz zu anderen Sprachen wird kein eigenständiges Programm im Binärcode erstellt. Zur Ausführung ist immer ein installierter Perl-Interpreter erforderlich. Bei genauerer Betrachtung des Perl-Interpreters stellt sich dieser Sachverhalt aber nicht mehr in dieser Reinheit dar. Der Perl-Interpreter übersetzt nämlich ein auszuführendes Perl-Skript (so nennt man die Textdateien mit Perl-Quellcode) zuerst vollständig in einen perlinternen Zwischencode der anschließend vom Perl-Interpreter abgearbeitet wird. Dies führt im Gegensatz zu reinen Interpretersystemen zu einer hohen Verarbeitungsgeschwindigkeit.
Perl kann auf verschiedene Art und Weise gestartet werden. Im einfachsten
Fall, der allerdings extrem selten sinnvoll ist, kann eine oder mehrere
Perl-Anweisungen direkt an den Perl-Interpreter zur Ausführung übergeben
werden. Dies erfolgt durch direkten Aufruf der Perl-Interpreters mit der
Kommandozeilenoption "-e".
Beispiel: perl -e 'print "Hello world!\n";'
Es liegt auf der Hand diese Art nur für sehr kurze Perlskripte zu benutzen.
Man kann so z.B. die Versionsnummer installierter Perl-Module in Erfahrung
bringen. Häufiger wird man sicherlich den Quellcode in einer Textdatei
zusammenfassen. So könnte man beispielsweise die Datei "code" mit
dem folgenden Inhalt anlegen:
Datei " code"$name = "Andreas";
print "Hallo $name\n";
Um dieses Skript nun auszuführen verwendet man beispielsweise unter MS-DOS das Kommando:
C:\test\> perl code
Einige Betriebssysteme erlauben es auch eine Dateiendung (Extension) mit
einem Programm zu verknüpfen. So wird üblicherweise beim Perl-Interpreter für
Windows die Endung ".pl" mit dem Perl-Interpreter verbunden.
Damit reicht ein Doppelklick im Windows-Dateimanager auf die Datei
"code.pl" aus um den Perl-Interpreter aufzurufen und ihn
anzuweisen dieses Perlskript abzuarbeiten.
Unter Unix-Betriebssystemen (die genau genommen überhaupt keine Extensions
kennen) gibt es einen anderen Mechanismus. Diese Betriebssysteme kennen
traditionell eine Fülle verschiedener Interpreter (sed, awk, oder div. Shells
wie sh, csh, bsh, ...). Damit das Betriebssystem ausführbare Dateien erkennt
werden diese einfach mit dem x-Recht (Ausführungsrecht) versehen. Das
Betriebssystem untersucht bei derartigen Dateien den Anfang auf das
Vorhandensein einer speziellen Zeile - dem sogenannten "shebang" (amerikanisch
"the whole shebang" für der ganze Plunder, Kram). Die Bezeichnung "shebang"
ist vermutlich von "shell bang" abgeleitet. Diese Zeile muß die erste Zeile
des Skripts sein und muß mit der Zeichenfolge "#!" beginnen.
Anschließend kann der Interpreter (incl. Pfadangabe) angegeben werden. Damit
beginnen die meisten Perl-Skripte unter Unixbetriebssystemen mit der Zeile
#!/usr/bin/perl
Zusätzlich sind noch Kommandozeilenschalter möglich. Während der
Entwicklung sei hier insbesondere der Schalter "-w" zur
Aktivierung von Warnungen empfohlen. Damit wird auf kritische Anweisungen
hingewiesen ohne das Programm abzubrechen. Unter Windows ist diese Zeile
unkritisch da das "#"-Zeichen normalerweise in Perl eine
Kommentarzeile einleitet.
Unser obiges Programm könnte also folgendermaßen auf allen Systemen laufen:
Datei " code.pl"#!/usr/bin/perl -w
$name = "Andreas";
print "Hallo $name\n";
Unter Unixartigen Betriebssystemen wird es dann beispielsweise folgendermaßen gestartet.
/home/grupp/test/> code.pl
Damit das funktioniert muß natürlich mindestens für den User das x-Recht
auf die Datei code.pl aktiviert worden sein (chmod u+x
code.pl).
WICHTIG: Besonders zu beachten sind die Zeilenendekennungen bei der Verwendung unterschiedlicher Betriebssysteme. So unterscheiden sich gerade Unix- und Microsoft-Systeme in dieser Hinsicht. Werden die Skripte unverändert übernommen so stürzt der Perl-Interpreter ab. Dabei liefert er aber Fehlermeldungen die auf alles andere hindeuten aber nicht auf ein Dateiproblem. Transferieren Sie die Dateien also im ASCII-Mode von ftp oder entwickeln Sie die Skripte mit Editoren die beide Dateiformate erstellen können.
Übung: Erstellen Sie nun auf einem Betriebssystem Ihrer
Wahl die das obige Beispielskript "code.pl" und führen Sie es anschließend
aus.
edit in einem MS-DOS-Fenster).
Beachten Sie, dass.txt
anfügt. Wenn Sie also die Datei hier mit "code.pl"
abspeichern haben sie meist die Datei "code.pl.txt" auf
der Platte. Das ist besonders schlimm wenn der Dateimanager die
Erweiterungen nicht anzeigt.Nachdem Sie nun wissen was Perl ist, wie Sie ein Perl-Skript erfassen und wie Sie es anschießend starten ist es nun an der Zeit mehr über Perl-Kommandos selbst zu erfahren. Doch zuerst noch etwas allgemeines zum Syntax von Perl. Speziell diejenigen Leser die C oder C++ kennen, aber auch Programmierer anderer Sprachen, werden starke Verwandschaften erkennen. Jede Code-Zeile ist mit einem Semikolon abzuschließen.
print "Semikolon NIE vergessen :-) !!";
Wie üblich sollte auch ein Perl-Skript gut kommentiert werden
<zeigefinger on>:-)</zeigefinger off>. Wie bei
Unix-Shellskripten üblich ist das "#"-Zeichen der Start eines
Kommentars. Der Rest der Zeile wird vom Perl-Interpreter nicht beachtet.
#!/usr/bin/perl -w
# Autor: A. Grupp
# Version: 0.1b
print "Hallo Welt!\n"; # Auch hier ein Kommentar
Nun aber los! Beginnen wir mit dem Umgang mit Zeichenketten. Erste
Beispiele zur Ausgabe von Zeichenketten (Strings) haben Sie ja schon in den
bisherigen Beispielen gesehen. Bislang habe ich Ihnen gezeigt, dass sie in
doppelte Hochkommas eingeschlossen werden. Dabei werden dann vom
Perl-Interpreter innerhalb der Zeichenkette auch diverse Ersetzungen
vorgenommen. Variablen ($name ist z.B. eine) werden bei dieser
Art von Zeichenketten durch ihren Inhalt ersetzt. Der Backslash "\" weist auf
Sonderzeichen - den sogenannten Escape-Sequenzen - hin. So ist beispielsweise
"\n" das Sonderzeichen für einen Zeilenumbruch.
Unser bisheriges Beispiel "code.pl"
#!/usr/bin/perl -w
$name = "Andreas";
print "Hallo $name\n";
gibt demnach auf dem Bildschirm den Text "Hallo Andreas" von
einem Zeilenumbruch gefolgt aus.
Zeichenketten können auch mit einfachen Hochkommas ' umgeben
werden. Dabei nimmt Perl jedoch keine Ersetzung vor und die Zeichenkette wird
unverändert ausgegeben.
print 'Hallo $name\n';
gibt also die Zeichenkette "Hallo $name\n" auf dem Bildschirm
aus ohne einen abschließenden Zeilenumbruch anzuhängen.
Innerhalb einer print-Anweisung können auch mehrere Ausgabe-Elemente durch Kommas getrennt angegeben werden. Die nächste Codezeile ergibt wieder unsere erste Variante.
print 'Hallo ', $name, "\n";
Wenn Sie erst einmal akzeptieren, dass $name eine Variable
ist, dann können wir dieser Variablen wie Sie schon gesehen haben auch eine
Zeichenkette zuweisen. Mit Hilfe des Verknüpfungsoperators "."
können sogar mehrer Zeichenketten zusammengefügt (konkateniert) werden.
$name = "Andreas";
$name = $name . ' ' . "Grupp\n";
$name .= "88069 Tettnang\n";
In der Variablen $name sind nun effektiv die zwei Textzeilen
Andreas Grupp
88069 Tettnang
enthalten. Am Ende jeder Zeile ist ein Zeilenumbruch.
Soweit ist das ja ganz nett. Wie bekommt man nun aber Daten über die
Tastatur in ein Perl-Skript? Dafür kennt Perl den vordefinierten Eingabekanal
<STDIN>. Er wird einfach wie bislang unsere Zeichenkette
benutzt und sorgt für einen automatischen Programmstop. Der Benutzer kann nun
Daten über die Tastatur eingeben und die Eingabe mit der Eingabetaste
abschliesen.
print 'Wie alt sind sie? ';
$alter = <STDIN>;
print "Ihr Alter in Jahren ist: $alter";
ACHTUNG: Im Gegensatz zu den meisten anderen Sprachen wird
bei Perl die Eingabetaste zwar als Ende der Eingabe akzeptiert aber
gleichzeitig wird ein Zeilenumbruch als Eingabezeichen eingelesen. Damit ist
$alter also bereits ein Zeilenumbruch enthalten und muß bei der
Ausgabe nicht mehr extra programmiert werden! Natürlich möchte man dieses
Verhalten nicht immer. Der immer mit eingelesene Zeilenumbruch muß also wieder
entfernt werden. Dazu wird die Funktion chomp() verwendet. Sie
entfernt einen Zeilenumbruch am Ende des Variableninhalts - allerdings nur
wenn dort auch einer ist!
print 'Wie alt sind sie? ';
$alter = <STDIN>;
chomp($alter);
print "Sie sind $alter Jahre alt!";
Noch einfacher geht die Kombination aus Einlesen und sofortigem Entfernen des Zeilenumbruchs:
chomp($alter=<STDIN>);
Übung: Schreiben Sie nun ein kleines Perlskript das Ihre persönlichen Adressdaten einliest (Vor- und Zuname in eigene Variablen) und anschließend in folgender Form wieder ausgibt:
Hans Mustermann
Testweg 12
12345 Musterhausen
Tel.: (012345) 6789
Nächstes Kapitel: Variablen in Perl
Lokal bzw.
Remote-Zugriffe seit dem 17. September 2000