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.
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:
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
geschrieben werden.open(LESEN,"< demo.dat");
Will man Daten nur an die Daten eines bestehenden Files anhängen, so schreibt man ">>" vor den Dateinamen:
open(SCHREIBEN,">> neu.dat");
|") 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.
-r File kann gelesen werden -w File kann beschrieben/gelöscht werden -x Ausführbares Programm -e Datei existiert -z Datei hat die Länge Null -s Rückgabe der Dateilänge -f File ist einfache Datei -d File ist ein Verzeichnis -l File ist ein symbolischer Link -M Alter der Datei in Tagen -A Letzter Zugriff (vor .. Tagen) -C Letzte Änderung (vor .. Tagen)
#!/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";
|
| Autor: Eike Grote | Letzte Änderung: 28.03.2000 |