2016-04-02 14 views
1

ich ein Perl-Skript haben sort.pl benannt, wie so in STDIN von einer Datei nimmt:Dateiumleitung VS. Befehlszeilenargumente

while(<>){ 
print; 
} 

und ich habe gedacht, ich muss mit Umleitung in einer Datei wie folgt weitergeben müssen: ./sort.pl < wordlist aber es hat darauf aufmerksam zu machen, dass ./sort.pl wordlist auch funktioniert.

Warum ist das der Fall? In anderen Sprachen muss ich normalerweise zwischen Befehlszeilenargumenten und Dateiumleitung angeben.

+1

Warum liest es Dateien als Befehle Zeilenargumente Ich kann es nicht besser als diese Antwort erklären: http://StackOverflow.com/a/12275794/7780 Warum es von Stdin liest, ist es, weil keine Argumente gegeben werden perl nimmt an, dass stdin die aktuelle "Datei" ist. – dsm

+0

Wenn Sie kein Dateihandle innerhalb des Eingabeoperators * eingeben, erhalten Sie den * Diamantoperator *. Suche nach diesem Begriff. – 7stud

Antwort

1

Wenn Sie nur von STDIN lesen wollte dann würden Sie verwenden:

while(<STDIN>){ 

Was haben Sie eigentlich verwendet wird:

while(<>){ 

Was bedeutet: alle Zeilen lesen, von allen Dateien aufgelistet in @ARGV oder wenn @ARGV leer ist, lesen Sie stattdessen von STDIN.