大多數(shù)程序都不是孤立的,它們與它們的環(huán)境相互作用。很多的程序也需要通過文件操作實(shí)現(xiàn)數(shù)據(jù)的存貯和交換。?文件句柄(file?handle)是Perl程序中為程序和外部世界提供I/O連接的名稱。建議全部使用大寫字母以示與變量等的區(qū)別。特別地,也可以將STDIN/STDOUT/STDERR也認(rèn)為?是Perl的文件句柄,分別代表標(biāo)準(zhǔn)輸入/標(biāo)準(zhǔn)輸出/標(biāo)準(zhǔn)錯(cuò)誤輸出。?
打開及關(guān)閉文件?
Perl的文件操作與C語言極為相似。如:?
open(FILENAME,"abc.txt");?
該調(diào)用為讀文件打開,若為寫文件而打開,需在文件名前加上大于號:?
open(FILENAME,">abc.txt");?
若要追加至文件尾,可在文件名前加上兩個(gè)大于號:?
open(FILENAME,">>abc.txt");?
以上三種open()格式在成功時(shí)返回真,失敗時(shí)返回假。但程序中通常沒有提示,出錯(cuò)時(shí)往往會被人們忽略。?通常當(dāng)需要給出出錯(cuò)提示時(shí),可加入die()函數(shù)。例:?
open(OUTFILE,">/tmp/outfile")||?
die?"出錯(cuò),不能建立/tmp/outfile\n";?
當(dāng)只有open失敗時(shí),才會執(zhí)行die給出出錯(cuò)提示。?
對文件句柄的操作完成后,可以用close操作符關(guān)閉文件。如:?
close(OUTFILE);?
-x?文件測試?
Perl的文件操作也可以先測試文件是否存在,是否可讀寫等。如:?
$x="abc.txt";?
if(-e?$x)?{?#abc.txt是否存在??
#?存在操作?
}?else?{?
printf?"文件不存在。\n";?
}?
-e操作符測試文件或目錄是否存在。?
以下為文件測試清單:?
文件測試?測試操作符提供的信息?
-r?文件或目錄可讀?
-w?文件或目錄可寫?
-x?文件或目錄執(zhí)行?
-o?文件或目錄歸用戶所有?
-R?文件或目錄對真正用戶可讀?
-W?文件或目錄對真正用戶可寫?
-X?文件或目錄對真正用戶執(zhí)行?
-O?文件或目錄歸真正用戶所有?
-e?文件或目錄存在?
-z?文件存在且大小為0?
-s?文件或目錄存在且不為0(返回字節(jié)數(shù))?
-f?文件為普通文件?
-d?文件為目錄?
-l?文件為符號鏈接?
-p?文件為命名管道(FIFO)?
-S?文件為一個(gè)套口(socket)?
-b?文件為塊特殊文件?
-c?文件為字符特殊文件?
-t?打開tty控制臺的文件句柄?
-u?文件或目錄是設(shè)置用戶ID號?
-g?文件或目錄是設(shè)置用戶組ID號?
-k?文件或目錄的sticky位置位?
-T?文件是文本文件?
-B?文件是二進(jìn)制文件?
-M?以天為單位的存在時(shí)間?
-A?以天為單位訪問時(shí)間?
-C?以天為單位同代碼更改時(shí)間?
刪除文件?
Perl的unlink()操作符可實(shí)現(xiàn)刪除文件。如:?
unlink("abc.txt");?#刪除abc.txt?
文件重命名?
Perl的rename()操作符可實(shí)現(xiàn)文件重命名。如:?
rename("abc","zmd")||die?"出錯(cuò),不能更名";?
此時(shí)將abc更名為zmd,成功返回真,否則給出出錯(cuò)提示。?
目錄操作?
Perl中處理目錄非常類似于處理文件。?
打開目錄句柄:?
opendir(ETC,"/etc")||die?"出錯(cuò),不能打開目錄";?
關(guān)閉目錄句柄:?
closedir(ETC);?
創(chuàng)建目錄:?
mkdir("zmd",0777)||die?"不能創(chuàng)建zmd目錄";?
0777為內(nèi)部權(quán)限格式。?
刪除目錄:?
rmdir("zmd")||die?"不能刪除zmd目錄"。