2 Stimmen

Perl: Lesen von <>

Was bedeutet das Lesen von <> in Perl tun? Was bewirkt zum Beispiel das Folgende?

print for(<>);

8voto

Zaid Punkte 35800

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.

3voto

sarnold Punkte 99402

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.

0voto

Dan Punkte 10451

Es liest von der Standardeingabe, eine Zeile nach der anderen, und speichert sie in $_ . print druckt dann aus $_ standardmäßig, da es kein Argument erhält. Dieses Programm liest von der Standardeingabe und gibt ein Echo auf der Standardausgabe aus, bis es EOF erreicht.

CodeJaeger.com

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.

Powered by:

X