我有一个简单的脚本,可以从目录中读取和列出文件。 但我不想列出隐藏文件,前面带有“。”的文件。
所以我尝试使用 grep 函数来执行此操作,但它什么都不返回。我没有列出文件。
opendir(Dir, $mydir);
while ($file = readdir(Dir)){
$file = grep !/^\./ ,readdir Dir;
print "$file\n";
我认为我没有正确使用正则表达式。 我不想使用数组,因为数组没有正确格式化列表。
答案 0 :(得分:4)
您可以使用循环迭代目录条目,也可以一次读取目录中的所有条目:
while (my $file = readdir(Dir)) {
print "$file\n" if $file !~ /^\./;
}
或
my @files = grep { !/^\./ } readdir Dir;
答案 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 =~ /^\./ );
}