2017-05-30 43 views
-1

我正在嘗試在perl中的文本文件中查找多個字符串。我得到它成功地工作,但它似乎並不十分有效:在文件中查找多個字符串 - 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

*「但它看起來效率不高」*你是說它爲你的目的運行得太慢,或者它看起來好多代碼?你有沒有聽說過'或'運營商? – Borodin

回答

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; }