?? perl 語言-perl 中文教程(第五章).htm
字號:
src="Perl 語言-Perl 中文教程(第五章).files/top.gif" width=180><BR><SPAN
class=myFont><SPAN class=myFont><FONT face=宋體>翻譯:</FONT></SPAN></SPAN>
<SPAN class=myFont><SPAN class=myFont>flamephoenix</SPAN></SPAN> <BR>
<HR width="100%" SIZE=1>
<DIV align=left></DIV></DIV>
<P align=center><B>第五章 文件讀寫 </B><BR></P>
<P><A
href="http://www.sun126.com/perl5/perl5-5.htm#一、打開、關閉文件">一、打開、關閉文件</A><BR><A
href="http://www.sun126.com/perl5/perl5-5.htm#二、讀文件">二、讀文件</A><BR><A
href="http://www.sun126.com/perl5/perl5-5.htm#三、寫文件">三、寫文件</A><BR><A
href="http://www.sun126.com/perl5/perl5-5.htm#四、判斷文件狀態">四、判斷文件狀態</A><BR><A
href="http://www.sun126.com/perl5/perl5-5.htm#五、命令行參數">五、命令行參數</A><BR><A
href="http://www.sun126.com/perl5/perl5-5.htm#六、打開管道">六、打開管道</A>
<BR><BR><A name=一、打開、關閉文件>一、打開、關閉文件</A> <BR> 語法為open (filevar,
filename),其中filevar為文件句柄,或者說是程序中用來代表某文件的代號,filename為文件名,其路徑可為相對路徑,亦可為絕對路徑。<BR> open(FILE1,"file1");<BR> open(FILE1,
"/u/jqpublic/file1");<BR> 打開文件時必須決定訪問模式,在PERL中有三種訪問模式:讀、寫和添加。后兩種模式的區別在于寫模式將原文件覆蓋,原有內容丟失,形式為:open(outfile,">outfile");而添加模式則在原文件的末尾處繼續添加內容,形式為:open(appendfile,
">>appendfile")。要注意的是,不能對文件同時進行讀和寫/添加操作。<BR> open的返回值用來確定打開文件的操作是否成功,當其成功時返回非零值,失敗時返回零,因此可以如下判斷:<BR> if
(open(MYFILE, "myfile")) {<BR> # here's what to do
if the file opened
successfully<BR> }<BR> 當文件打開失敗時結束程序:<BR> unless
(open (MYFILE, "file1")) {<BR> die ("cannot open
input file
file1\n");<BR> }<BR> 亦可用邏輯或操作符表示如下:<BR> open
(MYFILE, "file1") || die ("Could not open file");
<BR> 當文件操作完畢后,用close(MYFILE); 關閉文件。<BR><BR><A name=二、讀文件>二、讀文件
</A><BR> 語句$line =
<MYFILE>;從文件中讀取一行數據存儲到簡單變量$line中并把文件指針向后移動一行。<STDIN>為標準輸入文件,通常為鍵盤輸入,不需要打開。<BR><BR> 語句@array
= <MYFILE>;把文件的全部內容讀入數組@array,文件的每一行(含回車符)為@array的一個元素。<BR><BR><A
name=三、寫文件>三、寫文件</A>
<BR> 形式為:<BR> open(OUTFILE,
">outfile");<BR> print OUTFILE ("Here is an
output
line.\n");<BR> 注:STDOUT、STDERR為標準輸出和標準錯誤文件,通常為屏幕,且不需要打開。<BR><BR><A
name=四、判斷文件狀態>四、判斷文件狀態</A> <BR>1、文件測試操作符<BR> 語法為:-op
expr,如:<BR> if (-e "/path/file1")
{<BR> print STDERR ("File file1
exists.\n");<BR> }<BR> </P>
<P align=center>文件測試操作符 </P>
<DIV align=center>
<CENTER>
<TABLE borderColor=forestgreen cellSpacing=0 cellPadding=2 width="70%"
border=1>
<TBODY>
<TR>
<TD class=myFont vAlign=top width=192><B>操作符</B></TD>
<TD class=myFont vAlign=top width=384><B>描述</B></TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-b</TD>
<TD class=myFont vAlign=top width=384>是否為塊設備</TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-c </TD>
<TD class=myFont vAlign=top width=384>是否為字符設備 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-d </TD>
<TD class=myFont vAlign=top width=384>是否為目錄 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-e </TD>
<TD class=myFont vAlign=top width=384>是否存在 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-f </TD>
<TD class=myFont vAlign=top width=384>是否為普通文件 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-g </TD>
<TD class=myFont vAlign=top width=384>是否設置了setgid位 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-k </TD>
<TD class=myFont vAlign=top width=384>是否設置了sticky位 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-l </TD>
<TD class=myFont vAlign=top width=384>是否為符號鏈接 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-o </TD>
<TD class=myFont vAlign=top width=384>是否擁有該文件 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-p </TD>
<TD class=myFont vAlign=top width=384>是否為管道 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-r </TD>
<TD class=myFont vAlign=top width=384>是否可讀 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-s </TD>
<TD class=myFont vAlign=top width=384>是否非空 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-t </TD>
<TD class=myFont vAlign=top width=384>是否表示終端 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-u </TD>
<TD class=myFont vAlign=top width=384>是否設置了setuid位 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-w </TD>
<TD class=myFont vAlign=top width=384>是否可寫 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-x </TD>
<TD class=myFont vAlign=top width=384>是否可執行 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-z </TD>
<TD class=myFont vAlign=top width=384>是否為空文件 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-A </TD>
<TD class=myFont vAlign=top width=384>距上次訪問多長時間 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-B </TD>
<TD class=myFont vAlign=top width=384>是否為二進制文件 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-C </TD>
<TD class=myFont vAlign=top width=384>距上次訪問文件的inode多長時間 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-M </TD>
<TD class=myFont vAlign=top width=384>距上次修改多長時間 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-O </TD>
<TD class=myFont vAlign=top width=384>是否只為“真正的用戶”所擁有 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-R </TD>
<TD class=myFont vAlign=top width=384>是否只有“真正的用戶”可讀 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-S </TD>
<TD class=myFont vAlign=top width=384>是否為socket </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-T </TD>
<TD class=myFont vAlign=top width=384>是否為文本文件 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-W </TD>
<TD class=myFont vAlign=top width=384>是否只有"真正的用戶"可寫 </TD></TR>
<TR>
<TD class=myFont vAlign=top width=192>-X </TD>
<TD class=myFont vAlign=top width=384>是否只有"真正的用戶"可執行 </TD></TR>
<TR>
<TD class=myFont
colSpan=2>注:“真正的用戶”指登錄時指定的userid,與當前進程用戶ID相對,命令suid可以改變有效用戶ID。</TD></TR></TBODY></TABLE><BR></CENTER></DIV>
<P> 例:<BR> unless (open(INFILE,
"infile")) {<BR> die ("Input file infile cannot be
opened.\n");<BR> }<BR> if
(-e "outfile") {<BR> die ("Output file outfile
already
exists.\n");<BR> }<BR> unless
(open(OUTFILE, ">outfile")) {<BR> die ("Output
file outfile cannot be
opened.\n");<BR> }<BR> 等價于<BR> open(INFILE,
"infile") && !(-e "outfile")
&&<BR> open(OUTFILE, ">outfile") ||
die("Cannot open files\n");<BR><BR><A name=五、命令行參數>五、命令行參數</A>
<BR> 象C一樣,PERL也有存儲命令行參數的數組@ARGV,可以用來分別處理各個命令行參數;與C不同的是,$ARGV[0]是第一個參數,而不是程序名本身。<BR> $var
= $ARGV[0]; # 第一個參數<BR> $numargs = @ARGV; #
參數的個數<BR> PERL中,<>操作符實際上是對數組@ARGV的隱含的引用,其工作原理為:<BR>1、當PERL解釋器第一次看到<>時,打開以$ARGV[0]為文件名的文件;<BR>2、執行動作shift(@ARGV);
即把數組@ARGV的元素向前移動一個,其元素數量即減少了一個。<BR>3、<>操作符讀取在第一步打開的文件中的所有行。<BR>4、讀完后,解釋器回到第一步重復。<BR> 例:<BR> @ARGV
= ("myfile1", "myfile2"); #實際上由命令行參數賦值<BR> while
($line = <>) {<BR> print
($line);<BR> }
<BR> 將把文件myfile1和myfile2的內容打印出來。<BR><BR><A
name=六、打開管道>六、打開管道</A> <BR> 用程序的形式也可以象命令行一樣打開和使用管道(ex:ls >
tempfile)。如語句open (MYPIPE, "| cat >hello"); 打開一個管道,發送到MYPIPE的輸出成為命令"cat
>hello"的輸入。由于cat命令將顯示輸入文件的內容,故該語句等價于open(MYPIPE, ">hello");
用管道發送郵件如下:<BR> open (MESSAGE, "| mail
dave");<BR> print MESSAGE ("Hi, Dave! Your Perl
program sent this!\n");<BR> close (MESSAGE);
</P></TD></TR></TBODY></TABLE>
<DIV align=center></DIV>
<DIV align=center><BR></DIV>
<DIV align=center><SPAN class=myFont><A
href="http://www.sun126.com/perl5/perl5-4.htm">上頁</A> <A
href="http://www.sun126.com/perl5/perl5-6.htm">下頁</A> <A
href="http://www.sun126.com/perl5/perl5index.htm">回目錄</A> <A
href="http://www.sun126.com/perl5/perl5-5.htm#a"><FONT face="Arial, 宋體">Go
Top</FONT></A></SPAN><BR><BR></DIV>
<TABLE height=50 cellSpacing=0 cellPadding=0 width="100%" bgColor=#000000
border=0>
<TBODY>
<TR>
<TD bgColor=#cccc99 height=4>
<DIV align=center><IMG height=4 src="" width=4></DIV></TD></TR>
<TR>
<TD height=50>
<DIV align=center><FONT class=myfont size=2><SPAN class=myfont><FONT
color=#99cc99><A href="http://www.sun126.com/bbs/ccb/index.cgi"><FONT
color=#99cc99>中國CCB論壇</FONT></A> 整理 麻辣
2003.7.10</FONT></SPAN></FONT><FONT class=myfont color=#99cc99
size=2><SPAN class=myfont><FONT
color=#99cc66><BR></FONT></SPAN></FONT><SPAN class=myfont><FONT
class=myfont><SPAN class=myfont><FONT face="Arial, Helvetica, sans-serif"
color=#99cc99>© 2000
http://www.sun126.com</FONT></SPAN></FONT></SPAN></DIV></TD></TR></TBODY></TABLE></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -