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:
|
|
Hier wurde noch die Funktion chomp()
benutzt; sie
entfernt von der Zeichenkette im Argument den Zeilenvorschub
"\n
", mit dem die Eingabe von der Tastatur
abgeschlossen wird.
Bei der Zuweisung von <STDIN>
wird (wie oben
im skalaren Kontext) jeweils
eine Zeile, d.h., bis zum nächsten Vorschub, eingelesen.
Im Formatierungsstring von printf
hat das Prozentzeichen
"%
" eine besondere Bedeutung, indem es ein Ausgabeformat
einleitet. Die wichtigsten Formate zeigt folgende Tabelle:
Format Beschreibung %c
einzelnes Zeichen %s
Zeichenkette %d
,%i
Ganzzahl %o
Oktalzahl %x
Hexadezimalzahl %f
Gleitkommazahl %e
wissenschaftliche Schreibweise %%
explizites Prozentzeichen
Zwischen "%
" und dem Formatzeichen kann die gewünschte
Ausgabebreite (nur vergrößern möglich, also z.B. Auffüllen
mit Leerzeichen) bzw. Genauigkeit angegeben werden:
|
|
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:
|
Die Funktion open()
erwartet als erstes
Argument das sogenannte Filehandle, das per Konvention aus
Großbuchstaben besteht. Anschließend wird die zu öffnende
Datei angegeben.
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:
|
Um eine Datei zum Schreiben zu öffnen, muß dies durch ein
">
" vor dem Dateinamen angegeben werden.
Beispiel:
|
Hier wird also der gesamte Inhalt von alt.dat
gelesen
und in die Datei neu.dat
geschrieben. Zur Ausgabe auf
ein File wird der Funktion print
als erstes
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:
Das meist ohne Filehandle verwendete "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,"< alt.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");
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:
|
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.
Im zweiten Teil des Programms wird die Zeichenkette
"eins zwei drei vier
" an das Programm
wc
übergeben, 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.
Autor: Eike Grote | Version: 2.07 (27.10.2019) |