leanging perl(二) 輸入與輸出

perl 主要是對文件進行處理,所以免不了需要輸入與輸出。


1.輸入

a) 標準輸入。 標準輸入就是來自鍵盤的輸入了,可以這麼用 chomp($line = <STDIN>) 其中,<>接受出入,STDIN表示標準輸入,讀入標量$line, chomp操作符用來去除輸入行末尾的換行符(\n)。也可以這樣使用:while (<STDIN>) {

chomp; #默認對$_進行處理,等於上一例中的$line

}

b) 從文件輸入。 鑽石操作符<>,可以接受命令行的文件名,對文件進行按行輸入,讀取參數來自@ARGV數組,如程序program內容有

while (<>) {

chomp;

...

}

則可以在命令行這樣輸入$ ./program hello world程序會把hello 與 world 文件放入@ARGV數組,然後從數組中依次讀取文件,進行處理。如果數組爲空,也就是沒有參數(即要處理的文件),就會改用標準輸入流。


2.輸出

a)標準輸出。 有輸入自然要有輸出,標準輸出就是輸出內容到屏幕上。一般使用print 即可。如print "@arr"與print @arr,所不同的是前者會依次打印數組元素,有空格連接,後者沒用空格。 如果想像C語言一樣有格式化輸出,可以使用printf,如printf "I'm %s\n",$name; 模式爲‘格式字符串’加上‘要輸出的列表’。轉換的格式常用的有:%g 自動選擇數值形式;%d 十進制整數,%x 十六進制,%o 八進制;%s 字符串;%10.3f 浮點數,四捨五入,表示向右對齊共十位,保留小數點後3位;%-4d,表示向左對齊,共四位。注意要輸出%需要用%%。

有一個很不錯的輸出數組的方式printf "The items are:\n".("%10s\n" x @arr), @arr;其中@arr在這裏返回數組的元素個數,x表示重複這麼多次,即可格式化輸出數組全部元素。

b)輸出到文件。 需要先打開文件句柄。


3.文件句柄

在shell中輸入命令 $ ./program <file_input> file_output 即表示程序從file_input讀取輸入,輸出到file_output。

a)打開文件句柄。 open HD, "< file_input", open OUT," >file_output", open OUT, ">> file_output",分別表示打開文件句柄輸入,輸出(要麼新建文件,要麼清空原文件),以添加方式輸出。在新版本中當然可以將 '>'  '<'分出來寫,更加安全。

b)關閉文件句柄。 close HD,close OUT。


c)出錯處理。 不是每次打開文件都會成功大笑,這時候可以使用die函數處理,如下:

open HD,"< file_input" or die $!;

如果打開失敗會使程序終止運行,並輸出$!中內容,包含了失敗的原因。 也可以使用warn函數,與die類似,但是不會終止程序運行。


d)使用文件句柄。 瞭解了上面三點,就可以使用文件句柄工作了生氣

open HD, "< file_input" or die $!; #打開HD,輸入file_input內容

open OUT, ">> file_output" or die $!; #打開OUT,以追加方式打開file_output

while (<HD>) { #每次讀取輸入內容的一行

chomp;

my $line .= $_;#將每一行內容連接起來,放入$line

do_something;

}

print OUT "$line\n"; #最後通過句柄OUT將結果輸出到file_output。注意OUT與後面內容之間沒有逗號。

close HD,OUT;

也可以用say函數來代替print輸出,不同之處是末尾默認帶上換行符\n,很適合懶人啊吐舌頭


有時候會需要將文件一次性讀入,然後進行處理。有一個小技巧可以實現。

open FH,"< file_input" or die $!;
local $/ = undef;
my $lines = <FH>;
close FH;

$/ 存儲的是每行文件的結束標誌,默認爲“\n”,改爲undef之後,相當於每一行都沒有結尾,自然可以一次性讀入了,然後就可以用$lines進行自由的文本處理了,使用local表示這個改變只適用於本處,不過如果是同一文件,下面接着要進行按行讀入,可以這樣改回來local $/ = "\n"。這樣就可以了。


掌握了這些,相當於掌握了文本處理的框架,接下來就可以進一步的學習perl了。奮鬥

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章