我在这个perl正则表达式中哪里出错?

时间:2014-09-04 11:45:48

标签: regex perl

我试图使用正则表达式区分readdir是否返回文件或文件夹。

这是我的代码:

opendir($dh, $_[0]) || die "Can't open folder!";
while(($filename = readdir($dh))){
   if ($filename =~ /..*\...*/) {...}}

这个正则表达式的想法是它需要在点之前和之后至少有一个字符。我在perl在线正则表达式测试器中测试了这个表达式(没有" /"在开头和结尾)并且它起作用,但是实际上条件总是返回false。

我做错了什么?感谢

1 个答案:

答案 0 :(得分:4)

除非您的文件遵循特殊约定,否则只能通过查看名称来区分文件和文件夹。您可以使用-d检查路径是否为文件夹(请参阅here)。

my $root = $_[0];
opendir($dh, $root) || die "Can't open folder!";
while(($filename = readdir($dh)))
{
    next if $filename =~ /^\.{1,2}$/; # skip . and ..
    if (-d "$root/$filename")
    {
        # $filename is a folder
    }
    else
    {
        # $filename is something else (regular file, symlink, ...)
    }
}