1. 程式人生 > >perl 處理文件路徑的一些模塊

perl 處理文件路徑的一些模塊

都是 cti 默認 模塊 入參 func lis 合並 rds

perl有句格言:There is more than one way to do it。意思就是任何問題用perl都有好幾種解決方法。以前處理文件路徑的時候都是自己寫正則表達式,而用perl的模塊來解決則更加迅速、準確。

1). File::Basename

有3個方法:fileparse、basename、dirname。
用法:
($name,$path,$suffix) = fileparse($fullname,@suffixlist);
$basename = basename($fullname,@suffixlist);
$dirname = dirname($fullname);

說明:
a) 方法fileparse是將一個文件的全路徑拆成三部分,文件名、目錄名和後綴,@suffixlist是給一個後綴的集合。例如
($base,$path,$type) = fileparse(‘\\virgil\\aeneid\\draft.book7‘, qr{\.book\d+});
則輸出 $base ==> draft; $path ==> \virgil\aeneid\; $type ==> book7。
b) 方法basename和fileparse的輸入格式一樣,返回的是文件名加後綴。
c) 方法dirname返回文件目錄名。
註意,dirname和fileparse第二個返回值的比較:
i) 目錄結尾有無\;
dirname(‘\\virgil\\aeneid\\draft.book7‘) ==> \virgil\aeneid
fileparse(‘\\virgil\\aeneid\\draft.book7‘) ==> \virgil\aeneid\
ii) 輸入參數為目錄;
dirname(‘virgil\\‘) ==> .
fileparse(‘virgil\\‘) ==> virgil\

2). File::Spec::Functions

這個模塊輸出File::Spec類的方法,分為兩類:
(1) 可直接調用:
canonpath||catdir||catfile||curdir||rootdir||updir||no_upwards||file_name_is_absolute||path
(2) 以 File::Spec->方法名的形式調用:
devnull||tmpdir||splitpath||splitdir||catpath||abs2rel||rel2abs||case_toleran

這裏舉幾個常用的方法說明一下:
a) 方法catdir:將目錄合並,
catfile(‘a‘,‘b‘,‘c‘) ==> a\b\c
b) 方法splitdir:與catdir相反,拆分目錄
File::Spec->splitdir(‘a\\b\\c\\‘) ==>(‘a‘,‘b‘,‘c‘,‘ ‘) #註意最後有個空格

3). File::Path

有2個方法:mkpath和rmtree,分別為創建目錄和刪除目錄。

perl語言本身自帶了mkdir和rmdir,那為什麽還要選用 mkpath和rmtree呢?自帶的mkdir只能一次創建一級目錄,而mkpath則可以一次創建多級;rmdir必須要求目錄為空,而rmtree 則任意。總之,File::Path為我們提供了另一種創建和刪除目錄的機制,由用戶自己選用。

說明:
a) mkpath(directory, 1, 0711);
第一個參數為目錄名,第二個參數為一個bool值,為真的時候打印每次創建的目錄,默認為假,最後一個參數為目錄的權限。
b) rmtree(directory, 1, 1);
第一個參數為目錄名,第二個參數為一個bool值,為真的時候打印刪除文件時的一些信息,默認為假,最後一個參數也是一個bool值,為真的時候對沒有刪除權限的文件直接跳過。

perl 處理文件路徑的一些模塊