一、開啟檔案:
$OpenFileFlag = open(FILEHANDLE,"模式標識符 FileName");
如果開啟成功,則返回真值(非空值);如果開啟失敗,則返回假值(空值);檔案的預設訪問模式是唯讀;
1、使用open函數進行檔案重新導向:
$OpenFlag = open(HFCAT,"cat file* |");
則open函數先把cat命令的輸出構造成一個檔案,然後與檔案控制代碼變數HFCAT關聯起來;
$OpenFlag1 = open(FH1,"> FileName");
$OpenFlag2 = open(FH2,">& FH1");
這兩行語句的功能是把檔案控制代碼FH1和HF2都關聯到檔案FileName上,兩個檔案控制代碼都向同一個檔案中寫入資料;
其中第二條語句中的參數">& FH1"告訴Perl解譯器使用已經開啟的並與檔案控制代碼FH1關聯的檔案,即:檔案控制代碼FH1和FH2都指向與FH1相關聯的檔案;
二、關閉檔案:
關閉檔案使用函數close();如果關閉的檔案是管道檔案,即重新導向的命令時,程式會等待重新導向命令執行結束;
close(FILEHANDLE);
三、print、printf和write函數:
這三個函數都是輸出函數;其中print是最簡單的函數;
1、print ("Hello,Perl World/n");
輸出到當前預設的檔案中(由select()函數選擇),沒有調用select()時,預設的輸出檔案是標準輸出STDOUT;
2、print OUTFILE ("Hello,Perl World/n") ;
把資料輸出到指定檔案控制代碼OUTFILE所指向的檔案中;
3、printf ($FORMATSTRING,arg1,arg2,...,argN);
先格式化資料,然後把格式化後的資料寫到預設檔案中(由select()函數選擇),沒有調用select()時,預設的輸出
檔案是標準輸出STDOUT;
4、printf OUTFILE ($FORMATSTRING,arg1,arg2,...,argN);
先格式化資料,然後把資料輸出到指定檔案控制代碼OUTFILE所指向的檔案中;
5、write ($FORMATSTRING,arg1,arg2,...,argN);
先格式化資料,然後把格式化後的資料寫到預設檔案中(由select()函數選擇),沒有調用select()時,預設的輸出
檔案是標準輸出STDOUT;
6、write OUTFILE ($FORMATSTRING,arg1,arg2,...,argN);
先格式化資料,然後把資料輸出到指定檔案控制代碼OUTFILE所指向的檔案中;
7、select()函數:
select(FILEHANDLE);
這個函數把參數FILEHANDLE所指定的檔案控制代碼設定為當前新的預設檔案;當對print、printf和write函數的調用
未指定檔案時,預設就寫入到檔案控制代碼FILEHANDLE所指向的檔案中;
8、eof()函數:
eof函數判斷最後一次讀檔案操作是否是檔案的最後一個記錄(檢查檔案讀寫位置指標是否已經到達檔案尾部),
如果是,則返回非零值(真),如果不是,否則返回零值(假);也就是說,最後一次讀取檔案時,如果檔案讀寫位
置指標已經到達檔案尾部,則eof函數返回非零值(真),如果沒有到達檔案尾部,則返回零值(假);
一般情況下,帶圓括弧的eof()函數調用與不帶圓括弧的eof函數調用的效果是一樣的;但是如果與檔案輸入運算
符<>一起使用的話,效果就不一樣了;當在命令列輸入多個檔案的時候,不帶圓括弧的eof函數調用在讀完每一
個檔案的時候,都會認為讀到這個檔案尾部了,此時返回非零值(真),否則返回零值(假);而帶圓括弧的eof()函
數調用則會認為只有當所有的檔案都讀取完了,才會認為是讀取檔案結束,也就是說只有當檔案讀寫位置指標
到達最後一個檔案的尾部時,才會認為讀取檔案結束,此時eof()函數返回非零值(真),否則返回零值(假);只有
所有檔案都讀過了,eof()函數才會返回真值,如果只是多個檔案中的前面幾個檔案的結尾,則eof()函數仍然返
回假值,因為還有需要讀取的輸入;
四、系統讀寫函數:
1、read()函數:
Perl把該函數設計得與UNUX系統中的fread()函數等效,用於從指定檔案中讀取任意長度的字元(位元組)數,並把讀
到的資料存放區到一個簡單變數或數組元素中;調用文法如下:
$BytesToRead = read(FileVariable,Buffer,Length,BytesTpSkip);
FileVariable:用於隱藏檔控制代碼的簡單變數;
Buffer:用於儲存read讀到的資料的簡單變數(或數組元素);
Length:最多需要讀取的位元組數;
BytesToSkip:可選項,用於指定讀取檔案之前需要跳過的位元組數;
傳回值:傳回值為實際讀取到的位元組數;如果檔案讀寫位置指標已經到達檔案的尾部,則read()返回零;如果出
錯,則read()返回空值;
2、sysread()函數:
該函數用於更快地讀取資料,其實現與UNIX系統中的read()函數等效,與Perl中的read()函數相同;調用文法:
$BytesToRead = sysread(FileVariable,Buffer,Length,BytesToSkip);
FileVariable:用於隱藏檔控制代碼的簡單變數;
Buffer:用於儲存讀取到的資料的簡單變數(或數組元素);
Length:最多需要讀取的位元組數;
BytesToSkip:可選項,用於指定在讀取檔案之前需要跳過的位元組數;
傳回值:傳回值為實際讀取到的位元組數;如果檔案讀寫位置指標已經到達檔案尾部,則sysread()返回零;如果
出錯,則sysread()返回空值;
3、syswrite()函數:
該函數用於更快地寫入資料,其實現與UNIX中的write()函數等效;有4個參數:
$BytesToWrite = syswrite(FileVariable,DataBuffer,Length,BytesToSkip);
FileVariable:用於隱藏檔控制代碼的簡單變數;
DataBuffer:用於存放將要寫入的資料的緩衝區;
Length:需要寫入的位元組數;
BytesToSkip:在寫檔案之前需要跳過的位元組數;
傳回值:返回實際寫入的位元組數;如果出錯,則syswrite()返回空值;
4、getc()函數:
該函數用於從指定檔案中讀取一個字元(位元組);其實現與UNIX C語言中的getc()函數等效;調用文法:
$Char = getc(FileVariable);
FileVariable:用於存放檔案控制代碼的簡單變數;
傳回值:返回讀取到的字元;
5、binmode()函數:
該函數用於讀取二進位檔案;當所在的系統對文字檔和二進位檔案有所區別時使用;必須在開啟檔案之後、
讀取檔案之前調用;調用文法:
binmode(FileVariable) ;
FileVariable:用於存放檔案控制代碼的簡單變數;