我有一個使用File :: Next :: files遍歷目錄層次的Perl腳本。它只會返回以「.avi」,「.flv」,「.mp3」,「.mp4」和「.wmv」結尾的腳本文件。它也會跳過以下子目錄:「.svn」和以「.frames」結尾的任何子目錄。這在下面的file_filter
和descend_filter
子例程中指定。如何動態構建Perl正則表達式?
my $iter = File::Next::files(
{ file_filter => \&file_filter, descend_filter => \&descend_filter },
$directory);
sub file_filter {
# Called from File::Next:files.
# Only select video files that end with the following extensions.
/.(avi|flv|mp3|mp4|wmv)$/
}
sub descend_filter {
# Called from File::Next:files.
# Skip subfolders that either end in ".frames" or are named the following:
$File::Next::dir !~ /.frames$|^.svn$/
}
我想要做的就是把允許的文件擴展名和一個配置文件不允許的子目錄名稱,以便他們能夠在飛行中進行更新。
我想知道的是,如何根據配置文件中的參數對子例程進行編碼以構建正則表達式結構?
/.(avi|flv|mp3|mp4|wmv)$/
$File::Next::dir !~ /.frames$|^.svn$/
不能幫助你解決你的問題,但你使用的軟件包看起來很棒。我用普通的舊的File :: Find做了同樣的事情,它很**很混亂。我必須試一試。謝謝! +1 – Zenshai 2009-05-22 16:11:59
結帳:http://search.cpan.org/dist/File-Next/ – 2009-05-22 17:01:15
http://p3rl.org/File::Find::根據具體情況,規則可能對你更好。 – 2009-05-24 01:37:53