perl 處理檔案路徑的一些模組

2021-08-30 18:27:01 字數 1885 閱讀 1046

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);

則輸出 $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 的一些系統變數

當前頁可列印的行數,屬於perl格式系統的一部分 根據上下文內容返回錯誤號或者錯誤串 列表分隔符 列印數字時預設的數字輸出格式 perl直譯器的程序id 當前輸出通道的當前頁號 與上個格式匹配的字串 當前程序的組id 當前程序的有效組id 設定1表示處理多行格式.現在多以 s和 m修飾符取代之.當前...

perl的一些學習筆記

今天起,這篇文章來記錄一些perl的學習筆記,希望能堅持下去,持續更新。1 先上一段perl讀取配置檔案,連線資料庫的 config.ini 資料庫的連線字串配置檔案 127.0.0.1 1521 mymis mymis orcl data.pl 讀取config.ini,通過perl的dbi去運算...

檔案處理的一些資料收集

獲取檔名 private sub button1 click byval sender as system.object,byval e as system.eventargs handles button1.click if not aa.postedfile is nothing then di...