2016-03-22 11 views
1
$pattern = shift(@ARGV) 
while(<ARGV>){ 
    if(/$pattern/){ 
     print $ARGV,": ",$_; 
    } 
} 

Der Befehl: ./myprog.pl Größe Datei *Benötigen Sie Hilfe bei diesem Perl-Code zu verstehen

Wo File1:

SetSize 
ResetSize 
SETSIZE 
resetSIZE 

File2:

This is a new file 
and its Size is very small. 

Der Ausgang:

File1: SetSize 
File1: ResetSize 
File2: and its Size is very small 

Könnte jemand bitte diesen Hauptcode mir erklären. Ich verstehe wirklich nicht, wie es zwei Dateiausdrucke gibt, wo jede while-Schleife jedes Argument einmal ausführt, und es gibt nur 1 wenn Bedingung. Wie wird arg1 (Datei 1) zweimal ausgegeben?

Antwort

3

while(<ARGV>) ist ein bisschen Magie Perl: es wird Ihnen Linien aus jeder Datei in @ARGV aufgeführt. Relevante Dokumente: perlio: I/O Operators und perlvar: ARGV.

+0

So dauert es jedes arg und liest seine Datei, bis es das Ende erreicht und dann zum nächsten Argument geht? –

+0

Ja. Es öffnet die Datei mit dem ersten Argument und gibt jede Zeile zurück; Wenn es fertig ist, wird es den nächsten öffnen. In diesem Moment enthält Ihr 'ARGV'' 'File1'' und' 'File2'' aufgrund der Shell-Glob-Erweiterung, so dass es diese beiden Dateien durchläuft. – Amadan

Verwandte Themen