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


文章來源:

  http://blog.chinaunix.net/uid-10697776-id-2935619.html

 

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值,為真的時候對沒有刪除權限的文件直接跳過。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM