print "Wie heisst Du? "; $name = <STDIN>; print "Wie heisst Dein Editor? "; $edname = <>;Der Diamond-Operator
<>
liefert die Eingabe von STDIN zeilenweise
zurück. Er kann natürlich auch auf andere Dateihandle angewendet werden. Wird
das STDIN weggelassen, so wirkt <>
immer auf STDIN.print "Wie alt bist Du? "; $age = <STDIN>; chop($age) # entfernt das letzte Zeichen von $age #oder kuerzer: chop($age = <>);
Eine anderen Möglichkeit von Dateihandlen zu lesen ist die Funktion getc, die nicht zeilenweise, sondern zeichenweise einliest.
print "Antworte mit j oder n "; $antwort = getc STDIN; # oder $antwort = getc(STDIN);# oder $antwort = getc; # nur fuer STDIN!Wie man hier schon erahnt gibt es in PERL immer mehrere Wege etwas zu tun. So lautet auch das Motto von PERL: There is more than one way to do it[+].
Perl unterscheidt, ob eine Variable in einem skalaren oder einem Listen Kontext ausgewertet werden soll. Wie wir schon gesehen haben unterscheiden sich die beiden folgenden Anweisungen völlig.
@copy = @source; $size = @source;Im ersten Fall wird @source in einem Listen-Kontext evaluiert und liefert darum auch eine Liste (nämlich ihren Inhalt) zurück. Im zweiten Fall merkt PERL, daß nicht nach einer Liste gefragt ist, weil $size ja gar keine Liste aufnehmen kann, sondern nur ein Skalar und liefert darum auch nur ein Skalar zuück (die Anzahl der Elemente in @source).
So verhäelt sich auch <> im folgenden Beispiel:
print "Erzaehl mir alles ueber Dich.\n"; @all = <STDIN>; # Abbruch mit ^d (Ctrl-d) print "@all\n";Hier liefert <> nicht eine einzelne Zeile zurück, sondern den gesamten über STDIN eingegebenen Text und zwar so, daß die Elemente aus @all jeweils eine Zeile beinhalten.