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: 15.06.2001 |