perl中的Grep似乎永远不适合我

时间:2011-03-24 18:38:51

标签: regex perl

我有一个简单的脚本,可以从目录中读取和列出文件。 但我不想列出隐藏文件,前面带有“。”的文件。

所以我尝试使用 grep 函数来执行此操作,但它什么都不返回。我没有列出文件。

opendir(Dir, $mydir);
while ($file = readdir(Dir)){
$file = grep  !/^\./  ,readdir Dir;
 print "$file\n";

我认为我没有正确使用正则表达式。 我不想使用数组,因为数组没有正确格式化列表。

5 个答案:

答案 0 :(得分:4)

您可以使用循环迭代目录条目,也可以一次读取目录中的所有条目:

while (my $file = readdir(Dir)) {
    print "$file\n" if $file !~ /^\./;
}

my @files = grep { !/^\./  } readdir Dir;

请参阅perldoc -f readdir

答案 1 :(得分:3)

你在循环中调用readdir()两次。不。

答案 2 :(得分:1)

或者像这样:

#!/usr/bin/env perl -w
use strict;

opendir my $dh, '.';
print map {$_."\n"} grep {!/^\./} readdir($dh);

答案 3 :(得分:1)

使用glob:

my @files = glob( "$mydir/*" );
print "@files\n";

有关详细信息,请参阅perldoc -f glob

答案 4 :(得分:0)

while ($file = readdir(Dir))
{
    print "\n$file" if ( grep !/^\./, $file );
}

或者您可以使用正则表达式:

while ($file = readdir(Dir))
{
    print "\n$file" unless ( $file =~ /^\./ );
}