有没有比以下更紧凑的方法来获取与正则表达式匹配的文件行?
open my $fh, '<', $file or die "Cannot open $file: $!";
while ( my $line = <$fh> ) {
next unless $line =~ m/^foo\/([^\/]+\/?)*==/;
chomp($line);
$line =~ s/==$//g;
$search_result_set{$line} = 1;
}
答案1
@lines = grep s{^foo/([^/]+/?)*\K==\n?\z}{}, <$fh>;
将在数组中存储与@lines
模式匹配且删除尾随的行==\n
。$
匹配主题末尾和\n
主题尾随之前的内容,这里我们使用\n?\z
(可选的\n
后跟主题末尾 ( \z
))来删除换行符(如果存在),有效地完成chomp
工作。\K
标记要替换部分的开始。