我要查找不包含特定字符串的文件吗?列出的文件如下所示
../../../experiment/fileA.txt (contain word 'Book')
../../../experiment/fileB.txt (contain word 'Book')
../../../experiment/fileC.txt (do not contain word 'Book')
../../../experiment/fileD.txt (contain word 'Book')
Run Code Online (Sandbox Code Playgroud)
这是我的代码
use strict;
use warning;
my $dirname = "../../../experiment/";
my $keyword = "Book";
my @result;
my $find_file = sub {
my $F = $File::Find::name;
if ($F =~ /txt$/) {
open my $in, "<", $F or die $!;
while(<$in>) {
if (/\Q$keyword\E/){
next;
}else{
push @result, $F;
return;
}
}
}
};
find ({ wanted => $find_file, no_chdir=>1}, $dirname );
foreach my $result (@result){
chomp $result;
$result =~ s{.*/}{};
print "$result\n";
}
Run Code Online (Sandbox Code Playgroud)
但似乎不起作用。无论是否具有$ keyword,它都会显示所有文件。我只希望它仅在文件没有$ keyword时显示
有一个简单的逻辑错误。代码遍历每个文件的行
while (<$in>) {
if (/\Q$keyword\E/){
next;
} else {
push @result, $F;
return;
}
}
Run Code Online (Sandbox Code Playgroud)
并且只要任何一条线路没有$keyword把它添加的文件@result。
您需要检查所有行,如果$keyword从未找到,则添加一个文件。最简单的方法return是在找到东西后立即从潜艇
while (<$in>) {
return if /\Q$keyword/;
}
push @result, $F;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |