我试图在perl的文本文件中找到多个字符串。我正在成功地工作,但它看起来效率不高:
open(FILE,"$in" . "testFile.txt");
my @file = <FILE>;
close FILE;
if(grep{/test1/} @file){
...
}elsif(grep{/test2/} @file){
...
}elsif(grep{/test3/} @file){
...
}
我创建一个包含文件内容的数组,然后迭代3次。这看起来效率不高。有没有办法在一个if语句中使用它来减少迭代次数并在每个语句中重用代码?
答案 0 :(得分:3)
假设您的字符串没有跨线边界,您可以一次读取一行文件,并一次测试所有三个字符串
open my $fh, "${in}testFile.txt" or die $!;
while ( <$fh> ) {
if ( /test1/ or /test2/ or /test3/ ) {
# Do something
last;
}
}
如果你愿意,你可以把它折叠成一个正则表达式
if ( /test1|test2|test3/ ) { ...; last; }