Perl - Ein-/Ausgabe

[ <= ] [ HOME ] [ INHALT ] [ INDEX ] [ => ]

Terminal

Um Ausgaben auf die Benutzerschnittstelle zu schreiben, wird am einfachsten die Funktion print verwendet. Es gibt außerdem noch die Funktion printf, die als Argument zunächst eine Zeichenkette erwartet, die das gewünschte Ausgabeformat beschreibt, und anschließend die entsprechenden Variablen (im wesentlichen identisch zur Funktion printf() in C). Eine interaktive Eingabe kann über <STDIN> eingelesen werden.

Beispiel:

#!/usr/local/bin/perl -w

print "Name : ";
$name = <STDIN>;
chop($name);
printf("Hallo, %s!\n",$name);

Name : Eike
Hallo, Eike!

Hier wurde noch die Funktion chop() benutzt; sie entfernt von der Zeichenkette im Argument das letzte Zeichen (in diesem Falle den Zeilenvorschub "\n", mit dem die Eingabe von der Tastatur abgeschlossen wird).

Bei der Zuweisung von <STDIN> wird jeweils eine Zeile, d.h., bis zum nächsten Vorschub, eingelesen.


[ <- ] [ HOME ] [ INHALT ] [ INDEX ] [ -> ]

Dateien

Will man Daten von einem File lesen, so muß diese Datei erst geöffnet und ihr ein "Filehandle" zugewiesen werden. Anschließend kann über dieses Filehandle auf die Daten zugegriffen werden. Insbesondere beim Umgang mit Dateien (wie auch bei anderen Systemfunktionen) sollte immer anhand des Rückgabewertes kontrolliert werden, ob der Aufruf erfolgreich war.

Beispiel:

#!/usr/local/bin/perl -w

$rw = open(FILE,"demo.dat");
if(not defined($rw)) {
    die "Fehler beim Öffnen der Datei: $!\n";
}
while(defined($i = <FILE>)) { print $i }
close(FILE);

Obiges Programm ordnet über <FILE> der Variablen $i nacheinander jeweils eine Zeile der geöffneten Datei zu. Ist das Dateiende erreicht, kann keine Zuordnung mehr stattfinden, daher bleibt dann der Wert von $i undefiniert; dies wird durch die Funktion defined()überprüft ("Lese solange Zeilen ein, wie $i einen definierten Wert besitzt"). Nach Beendigung des Lesevorgangs wird die Datei mit close wieder geschlossen; fehlt diese Funktion, so werden bei Programmende automatisch alle noch offenen Files geschlossen.

Im Falle eines Fehlers beim Dateizugriff ist der Rückgabewert von open() nicht definiert, und die spezielle Variable $! enthält die Fehlermeldung des Betriebssystems.

Kürzer und einprägsamer läßt sich die Überprüfung des Rückgabewertes wie folgt schreiben:

open(FILE,"demo.dat") or die "Fehler beim Öffnen der Datei: $!\n";

Um eine Datei zum Schreiben zu öffnen, muß dies durch ein ">" vor dem Dateinamen angegeben werden.

Beispiel:

#!/usr/local/bin/perl -w

open(LESEN,"demo.dat") or die "Fehler beim Öffnen von 'demo.dat': $!\n";
open(SCHREIBEN,"> neu.dat") or die "Fehler beim Öffnen von 'neu.dat': $!\n";

while(defined($i = <LESEN>)) { print SCHREIBEN $i }

close(LESEN);
close(SCHREIBEN) or die "Fehler beim Schließen von 'neu.dat': $! \n"

Hier wird also der gesamte Inhalt von demo.dat gelesen und in die Datei neu.dat geschrieben. Zur Ausgabe auf ein File wird der Funktion print als erstes Argument das Filehandle übergeben.

Beim Schreiben in eine Datei empfiehlt sich auch eine Überprüfung des Rückgabewertes von close(), um sicherzugehen, daß der Schreibvorgang erfolgreich abgeschlossen wurde.

Außer den vom Programmierer definierten Filehandles gibt es drei Standard-Handles wie in UNIX:

Das "normale" print ist also eigentlich nur eine Abkürzung für "print STDOUT".

Ebenso ist die Richtung des Datentransfers (Lesen oder Schreiben) an die entsprechenden Shell-Konventionen angelehnt. Zum Lesen einer Datei kann auch

open(LESEN,"< demo.dat");
geschrieben werden.

Will man Daten nur an die Daten eines bestehenden Files anhängen, so schreibt man ">>" vor den Dateinamen:

open(SCHREIBEN,">> neu.dat");


[ <- ] [ HOME ] [ INHALT ] [ INDEX ] [ -> ]

Pipes

Außer mit Dateien kann ein Perl-Programm auch Daten direkt mit Programmen austauschen (sofern dies vom Betriebssystem - wie z.B. UNIX - unterstützt wird). Dies funktioniert mit Hilfe von sogenannten Pipes. Zur Markierung wird dabei das Pipe-Symbol (ein senkrechter Strich "|") verwendet.

Beispiel:

#!/usr/local/bin/perl -w

open(DATUM,"date |");                 # date : Datumsfunktion
print <DATUM>;
close(DATUM) or die "Kommando 'date' konnte nicht ausgeführt werden\n";

open(WORT,"| wc > wort.dat");         # wc : Zaehlprogramm
print WORT "eins zwei drei vier\n";
close(WORT) or die "Kommando 'wc' konnte nicht ausgeführt werden\n";

Im ersten Teil des Programms wird unter UNIX der Befehl date ausgeführt und das Ergebnis an das Perl-Skript geliefert. print gibt somit Datum und Uhrzeit des Systems aus.

Der zweite Teil des Programms übergibt die Zeichenkette "eins zwei drei vier" an an das Programm wc, das dann die Zeichen, Wörter und Zeilen der Eingabe liest und das Ergebnis (1 Zeile, 4 Wörter, 20 Zeichen) in die Datei wort.dat schreibt (das Öffnen von Ein- und Ausgabepipes in einem Filehandle gleichzeitig ist nicht möglich).

Bei Pipes ist es wichtig, den Rückgabewert von close() (und nicht den von open()) zu überprüfen, um festzustellen, ob das Kommando ausgeführt werden konnte.


[ <- ] [ HOME ] [ INHALT ] [ INDEX ] [ -> ]

Eigenschaften von Dateien

Mit jedem File ist eine Vielzahl von Parametern verknüpft, die gewisse Eigenschaften (z.B. das Erstellungsdatum) speichern. Die folgende Liste enthält nur die wichtigsten davon: Anwendungsbeipiel:
#!/usr/local/bin/perl -w

if(-r "test.pl") { print "lesbar\n" } 
else { print "nicht lesbar\n" }

print "Länge ist : ".(-s "test.pl")."\n";

$alter = (-M "test.pl");            # Gleitkommazahl!
print "Alter : $alter Tage\n";


[ <= ] [ <- ] [ HOME ] [ INHALT ] [ INDEX ] [ -> ] [ => ]

Autor: Eike Grote Letzte Änderung: 15.06.2001