2009-10-14 78 views
3

我正在編寫一個腳本,查找目錄中的某些文件並處理它們。我一直在寫以下內容:如何用一條語句在Perl中讀取一個目錄?

opendir DIR, $dir; 
@files = readdir DIR; 
closedir DIR; 

雖然我可能(事實上應該)在一個函數把這個包,我想知道是否有一個更優雅的方式來做到這一點?

+0

你可能想看看這個問題的答案:http://stackoverflow.com/questions/ 1506801/what-reasons-there-to-prefer-glob-over-readdir-or-vice-versa-in-perl – innaM 2009-10-14 11:21:04

+1

你是什麼意思「寫一個目錄」? – 2009-10-14 12:18:07

+0

其實我的意思是「寫下面的代碼*」 – 2009-10-14 12:52:22

回答

14

最優雅的是使用其他人已經寫好的功能。

use File::Slurp; 

@files = read_dir $dir; # . and .. are removed by default 
1

我喜歡使用File::Find這種東西。

+1

爲什麼你想要做一個深度優先搜索從一個目錄中獲取文件列表? – 2009-10-15 00:56:08

5

另一種方法是使用do塊:

my @files = do { 
    opendir my $d, '/your/dir/'; 
    readdir $d; 
}; 

它更優雅,因爲我的$ d是局部阻塞(不像你的DIR全局)不需要和closedir,因爲文件句柄$ d超出範圍時自動關閉。

/I3az/

0

沒人說得清glob了嗎? OK,這裏有雲:

@files = glob("$dir/*"); 

或者,如果你需要以點開始,也文件:

@files = glob("$dir/{.,}*") 
0

水珠是最簡單的解決方案。我不知道你認爲前面三行代碼屬於哪個子程序,除非你打開這個文件不止一次

相關問題