2017-09-25 53 views
0

匹配不同的線條組成的圖案,我想用這個在Perl

my $line = <>; 

if($line =~ /hello\nthere/m){ 
    say "matched"; 
} 
else{ 
    say "no match"; 
} 

然而,以匹配不同的線條組成的圖案,當我運行含有以下內容的文件的程序,它不匹配。

hello 
there 

我試過使用點運算符(。)和/ s修飾符以及。任何幫助,將不勝感激。謝謝。

+4

我對Perl不是很熟悉,但是鑽石操作員不會逐行迭代嗎?在這種情況下,你不會同時把'hello'和'there'同時出現。 – CAustin

+1

您可以設置一些變量,以便它可以立即吃掉所有的輸入,但是。默認情況下,你一次只能得到一行。 – cHao

+0

我完全忘了那個。謝謝您的幫助! –

回答

4

<>只讀取一行輸入,除非您清除$/變量。

my $all_lines = do { local $/; <> }; 

然後,您可以匹配

$all_lines =~ /hello\nthere/; 

無需/m,因爲它改變了^$,這兩者都不是存在於正則表達式的含義。

+0

非常感謝。這工作。我完全忘了它逐行閱讀。 –

+0

$ /只是本地調用子程序調用的改變,還是全局改變?例如,如果我在子例程上更改它,它會在另一個子例程中重置爲默認值嗎? –

+2

'local'在最近的範圍內改變它的值,'do {...}'限制範圍。 – choroba