標籤:
讀取標準輸入
用<STDIN>進行標準輸入:chomp($line=<STDIN>);
如果讀到檔案尾,行輸入操作符就會返回undef。便可利用這一性質跳出迴圈。
while(defined ($line=<STDIN>)){
print "I saw $line";
}
簡寫為:
while(<STDIN>){
print "I saw $_ .";
}
注意:這個簡寫只在最早的寫法中才能正常運行,如果將行輸入操作符放在其他的任何地方(特別是自成一行),他並不會讀取行輸入並自動儲存入預設變數$_。唯獨在while迴圈中條件運算式裡只有行輸入操作符的前提下這個簡寫才起作用。
同樣foreach也有這樣的用法:
foreach (<STDIN>){
print "I saw $_";
}
不同之處在於:while每讀入一行就處理一行,foreach需要一次性讀完再處理。
#!/usr/bin/perluse strict;use warnings;while (<STDIN>) { print "I saw $_ \n";}foreach (<STDIN>) { print "I saw $_ \n";}
來自鑽石操作符(<>)的輸入
可以用鑽石操作符編寫類似cat、sed、awk、sort、grep、lpr等工具程式。
程式調用參數:$./my_program fred barney betty
如果比提供任何調用參數的話,程式會從標準輸入資料流中採集資料。此外:如果用連字號(-)當作參數,則表示要從標準輸入中讀入資料。所以假如調用參數fred - betty,那麼程式應該先處理檔案fred,然後處理標準輸入資料流提供的的資料,最後是betty。
鑽石操作符就是行輸入操作符的特例。不過他並不是從鍵盤中讀取輸入,而是從使用者指定的位置讀取:
while(defined($line =<>)){
chomp($line);
print "It was $line that I saw!\n";
}
如果現在輸入的是調用參數是fred、barney、betty那麼,輸出結果就會是"It was [從檔案中讀取的一行內容] line that I saw!"等,直到遇到檔案尾結束。注意:<>在讀完一個檔案後會接著讀新的檔案,然後在逐行輸出內容。應為使用鑽石操作符時已經報這些檔案合并成一個很大的檔案一樣,鑽石操作符只有碰到所有的輸入的結尾時才會返回undef然後跳出while迴圈。
上面代碼簡寫:
while (<>){
chomp;
print "It was $_ that I saw!\n";
}
注意:鑽石操作符一般會處理所有的輸入,所以在程式中如果看到多個鑽石操作符那麼通常是錯誤的。
#!/usr/bin/perlwhile (<>){ chomp; print "$_ \n";}
//注意代碼中下面執行指令中添加了-,並從grep的輸出管道中讀入
perl學習筆記四——輸入與輸出