Was bedeutet das Lesen von <>
in Perl tun? Was bewirkt zum Beispiel das Folgende?
print for(<>);
Was bedeutet das Lesen von <>
in Perl tun? Was bewirkt zum Beispiel das Folgende?
print for(<>);
Der so genannte Diamant-Operator ( <>
) liest Zeile für Zeile (im skalaren Kontext) von STDIN oder den als Kommandozeilenargumente angegebenen Dateinamen.
Von perldoc perlop
:
Der Null-Filehandle
<>
ist etwas Besonderes: Es kann verwendet werden, um das Verhalten von sed und awk zu emulieren. Die Eingabe von<>
kommt entweder von Standard Eingabe oder von jeder in der Befehlszeile aufgeführten Datei. So funktioniert es funktioniert: Beim ersten Mal<>
ausgewertet wird, wird die@ARGV
Array geprüft wird, und wenn es leer ist,$ARGV[0]
wird eingestellt auf"-"
die beim Öffnen eine Standardeingabe liefert. Die@ARGV
Array wird dann als eine Liste von Dateinamen verarbeitet.
Im Kontext der Liste, <>
gibt alle Zeilen zurück, wobei jede Zeile als ein Element in der Liste gespeichert wird.
Dies bedeutet, dass print for <>;
bewirkt dasselbe wie print while <>;
allerdings mit mehr Speicherplatz.
Sie haben das magischste Stück von Perl gefunden. Nun, ich bin sicher, es gibt mehr magische Dinge, aber diese kleine Redewendung macht es sehr einfach zu schreibende Programme für die Verwendung in der Shell-Pipeline y Datei-Operation verwenden.
Bei Ausführung ohne Argumente, <>
liest eine Zeile nach der anderen von der Standardeingabe.
Wenn es mit Argumenten ausgeführt wird, behandelt es die Argumente als Dateinamen und liest eine Zeile nach der anderen aus den benannten Dateien.
Eine kurze Demo:
$ cat > print.pl
#!/usr/bin/perl -w
print for(<>);
$ chmod 755 print.pl
$ echo hello world | ./print.pl
hello world
$ ./print.pl print.pl
#!/usr/bin/perl -w
print for(<>);
$ ./print.pl print.pl print.pl
#!/usr/bin/perl -w
print for(<>);
#!/usr/bin/perl -w
print for(<>);
$
Dort habe ich das Programm von Hand eingetippt und auf ^D
wenn Sie den Text vollständig eingegeben haben.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.