2009-06-04 57 views

回答

57

對於文字(靜態)正則表達式,沒有什麼可做 - perl只會編譯它們一次。

if ($var =~ /foo|bar/) { 
    # ... 
} 

對於存儲在變量中的正則表達式,您有幾個選項。您可以使用qr//運營商建設一個正則表達式對象:

my $re = qr/foo|bar/; 

if ($var =~ $re) { 
    # ... 
} 

,如果你想使用正則表達式在多個地方或把它傳遞給子程序這是非常方便。

如果正則表達式是一個字符串,你可以使用/o選項承諾的perl,它永遠不會改變:

my $pattern = 'foo|bar'; 

if ($var =~ /$pattern/o) { 
    # ... 
} 

它通常是更好地這樣做,雖然。 Perl很聰明,知道變量沒有改變,正則表達式也不需要重新編譯。指定/o可能是過早的微觀優化。這也是一個潛在的陷阱。如果變量已將更改爲使用/o,則會導致perl使用舊的正則表達式。這可能會導致難以診斷錯誤。

19

簡單:檢查qr //運算符(記錄在perlop下的Regexp Quote-Like Operators)。

my $regex = qr/foo\d/; 
$string =~ $regex; 
+0

不錯,它似乎可以用作s ///結構中的模式。它仍然是預編譯的,還是在這種情況下再次編譯? – akostadinov 2012-11-16 15:18:19

+0

@akostadinov它仍然是預編譯的。 – 2018-03-01 19:02:58

相關問題