2013-08-20 32 views
2

我正在循環遍歷文件中的行,並且匹配特定行時,我想要處理當前(匹配)行之後的行。我能做到這一點: -忽略文件中的行直到匹配並在此之後處理行

open my $fh, '<', "abc" or die "Cannot open!!"; 
while (my $line = <$fh>){ 
    next if($line !~ m/Important Lines below this Line/); 
    last; 
} 
while (my $line = <$fh>){ 
    print $line; 
} 

是否有更好的方法來做到這一點(代碼需要一個更大的Perl腳本的一部分)?

回答

7

我會使用flip-flop operator

while(<DATA>) { 
    next if 1 .. /Important/; 
    print $_; 
} 
__DATA__ 
skip 
skip 
Important Lines below this Line 
keep 
keep 

輸出:

keep 
keep 
+0

任何想法,爲什麼它不會在文件上循環線(如在我的例子中顯示的工作)? –

+0

@VineetDeoraj不,它應該適用於任何文件句柄。如果沒有,你做錯了什麼。 – TLP

+1

@ M42您應該指出觸發器中的'1'實際上是一個行號('$。== 1'),所以觸發器將爲#1行「打開」,但是一旦關閉將保持關閉,直到eof。 – TLP

相關問題