Zurück

Nächstes Kapitel: Variablen in Perl

  

Einführung in die
Programmiersprache Perl
von A. Grupp

Entstehung

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.

Arbeitsweise

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.

Handhabung

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.

  1. Editieren Sie beispielsweise die Textdatei auf einem Windowssystem mit einem Texteditor (z.B. edit in einem MS-DOS-Fenster). Beachten Sie, dass
  2. Übertragen anschießend die erstellte Datei per ftp auf einen Linux-Rechner im Netz.
  3. Melden Sie sich dann über telnet bei dem Linux-Rechner an und versuchen Sie das Skript auf Shellebene zu starten.

Die ersten Anweisungen

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

Zurück


Zaehler Lokal bzw. Remote-Zugriffe seit dem 17. September 2000