【发布时间】:2009-05-26 22:57:42
【问题描述】:
我有一个使用 File::Next::files 遍历目录层次结构的 Perl 脚本。它只会返回以“.avi”、“.flv”、“.mp3”、“.mp4”和“.wmv”结尾的脚本文件。它还将跳过以下子目录:“.svn”和任何以“.frames”结尾的子目录。这在下面的file_filter 和descend_filter 子例程中指定。
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
-
p3rl.org/File::Find::Rule 可能更适合您,具体取决于具体情况。
标签: regex perl configuration