perl 处理文件路径的一些模块
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值,為真的時候對沒有刪除權限的文件直接跳過。
轉載于:https://www.cnblogs.com/yechanglv/p/6923202.html
總結
以上是生活随笔為你收集整理的perl 处理文件路径的一些模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我是怎么利用微信做兼职月入1W的
- 下一篇: [转]解读Unity中的CG编写Shad