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