我正在編寫一個腳本,查找目錄中的某些文件並處理它們。我一直在寫以下內容:如何用一條語句在Perl中讀取一個目錄?
opendir DIR, $dir;
@files = readdir DIR;
closedir DIR;
雖然我可能(事實上應該)在一個函數把這個包,我想知道是否有一個更優雅的方式來做到這一點?
我正在編寫一個腳本,查找目錄中的某些文件並處理它們。我一直在寫以下內容:如何用一條語句在Perl中讀取一個目錄?
opendir DIR, $dir;
@files = readdir DIR;
closedir DIR;
雖然我可能(事實上應該)在一個函數把這個包,我想知道是否有一個更優雅的方式來做到這一點?
最優雅的是使用其他人已經寫好的功能。
use File::Slurp;
@files = read_dir $dir; # . and .. are removed by default
另一種方法是使用do
塊:
my @files = do {
opendir my $d, '/your/dir/';
readdir $d;
};
它更優雅,因爲我的$ d是局部阻塞(不像你的DIR全局)不需要和closedir,因爲文件句柄$ d超出範圍時自動關閉。
/I3az/
沒人說得清glob
了嗎? OK,這裏有雲:
@files = glob("$dir/*");
或者,如果你需要以點開始,也文件:
@files = glob("$dir/{.,}*")
水珠是最簡單的解決方案。我不知道你認爲前面三行代碼屬於哪個子程序,除非你打開這個文件不止一次
你可能想看看這個問題的答案: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
你是什麼意思「寫一個目錄」? – 2009-10-14 12:18:07
其實我的意思是「寫下面的代碼*」 – 2009-10-14 12:52:22