1 #!/usr/local/bin/perl
2
3 open my $fh_input, '<', "./open_file.pl" or die "read file failed: $!";
4 while ( my $line = <$fh_input> ) {
5 print $line ;
6 }
7 close $fh_input or die "close file failed: $!";
8
9 exit 0;
請執(zhí)行一下該程序:
./open file.pl
它將輸出整個程序的內(nèi)容。現(xiàn)在我們逐行說明一下。
第3行,open打開一個文件,并綁定到一個文件句柄(handle),供后續(xù)操作使用。文件句柄可理解為指向該文件的內(nèi)容被讀進內(nèi)存的地址,在這行結(jié)束后,這個文件句柄(即$fh_input)指向文本內(nèi)容的初始位置,即第1行的第1個字符之前的位置。這行語句分成幾個部分,open是命令本身,my $fh_input聲明了一個局部標量,$fh_input作為文件句柄,<表示后面的文件是作為輸入文件被讀取(只讀)的,./open_file.pl即被讀取的文件的文件名,它恰好是程序本身。后面還有or die "…",or是邏輯操作符,它的意義是在左右兩個表達式有一個為“真”時,整個表達式的值為“真”;左右兩個表達式全為“假”時,整個表達式的值為“假”。Perl中的邏輯操作符都有一個特點,當部分表達式的值已經(jīng)可以決定整個表達式的值時,不必查看或執(zhí)行剩余表達式了。我們看一下這個open語句,它在or操作符的左側(cè)作為左側(cè)表達式,當open語句成功時,這個左側(cè)表達式為“真”,那么無論or右側(cè)的表達式是何值,這整個表達式的值都是“真”,所以or右側(cè)的表達式die函數(shù)不會被執(zhí)行。只有當open語句失敗,返回“假”時,die函數(shù)才會執(zhí)行。die函數(shù)的功能就是輸出字符串,然后結(jié)束程序。這正是我們想要的,因為多數(shù)情況下,一旦讀取文件失敗,那么后面的代碼將失去意義,退出程序并檢查代碼是更好的選擇。$!是一個內(nèi)建的標量,它會保留最后(最近)一個系統(tǒng)調(diào)用所產(chǎn)生的錯誤信息。如果我們把第3行的文件名修改為一個不存在的文件(如abc.pl),那么我們可以看到輸出:
read file failed: No such file or directory at ./abc.pl line 3.