您好,登錄后才能下訂單哦!
這篇文章主要介紹Perl目錄句柄基本操作有哪些,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
Perl目錄句柄操作(opendir,readdir,closedir)
從給定目錄得到其文件名列表的方法還可以使用Perl目錄句柄(directoryhandle)。Perl目錄句柄外形及其行為都很像文件句柄。打開(使用opendir而非open),從中讀入(使用readdir而非readline),關(guān)閉(使用closedir而非close)。不是讀入文件的內(nèi)容,而是將一個(gè)目錄中的文件名(以及一些其它東西)讀入,如下例:
my$dir_to_process="/etc"; opendirDH,$dir_to_processordie“Cannotopen$dir_to_process:$!”; foreach$file(readdirDH){ print“onefilein$dir_to_processis$file\n”; } closedirDH;
同文件句柄一樣,Perl目錄句柄會(huì)在程序結(jié)束時(shí)自動(dòng)關(guān)閉;或者當(dāng)Perl目錄句柄被重新打開而指向另一個(gè)目錄時(shí),也會(huì)自動(dòng)關(guān)閉。
在Perl以前的版本中,globbing它會(huì)調(diào)用別的進(jìn)程;Perl目錄句柄不會(huì),因此它更有效率,能更有效的利用系統(tǒng)資源。但是,這是一種底層(lower-level)的操作,意指我們需要自己處理更多的事情。
while($name=readdirDIR){ nextunless$name=~/\.pm$/; …moreprocessing… }
上述的語法是正則表達(dá)式而非glob。如果想要所有的非點(diǎn)(non-dot)文件(不是由點(diǎn)開頭的文件),可以使用:
nextif$name=~/^\./;
如果想要除了通常的點(diǎn)(當(dāng)前目錄)以及點(diǎn)點(diǎn)(父目錄)之外的所有文件,我們可以明確地使用下面的語句:
nextif$nameeq“.”or$nameeq“..”;
現(xiàn)在我們討論最容易混淆的部分,請(qǐng)打起精神來。readdir操作返回的文件名沒有路徑名部分,而只是文件名。因此,我們的得到的不是/etc/passwd而是passwd。由于這又是一個(gè)不同于globbing的地方,人們也經(jīng)常在這里出現(xiàn)混淆。
你需要將路徑名加上,以得到文件的全名(路徑名+文件名):
opendirSOMEDIR,$dirnameordie“Cannotopen$dirname:$!”; while(my$name=readdirSOMEDIR){ nextif$name=~/^\./;#跳過點(diǎn)文件 $name=“$dirname/$name”;#加上目錄名 nextunless–f$nameand–rname;#除非是可讀文件如果沒有加上目錄名,則測(cè)試部分將只檢測(cè)當(dāng)前目錄下的文件,而不是$dirname下的文件。
以上是“Perl目錄句柄基本操作有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。