2012-11-26 44 views
3

我試圖在應用程序中使用Regexp::Grammars,但它打破了很多其他正則表達式。例如,以下代碼:加載後正則表達式使用正則表達式Regexp :: Grammars

$hello = 'hello'; 
print 'hello 1' if $hello =~ /hello/; #prints "hello 1" 
use Regexp::Grammars; 
print 'hello 2' if $hello =~ /hello/; #prints nothing 

演示我的問題。我不知道如何處理這個問題,除了重複加載和卸載模塊外,我甚至都不確定我是否可以在使用no明確卸載模塊後使用擴展正則表達式。如何讓正則正則表達式仍然得到Regexp :: Grammars的力量?

回答

4

您無法卸載模塊。模塊只是一個腳本。卸載一個模塊將是未執行它。

但是,該模塊確實充當詞彙雜注,因此您可以輕鬆限制其效果的範圍。

my $grammar = do { 
    use Regexp::Grammars; 
    qr{ 
     ... 
    }x; 
    # Active here 
}; 
# Not active here 

創建的語法,其中正則表達式語法::是活動的,可以用在正則表達式語法::不活躍,所以只要僅在一個語法定義的正則表達式語法::活躍。 (什麼是貧窮接口模塊有!)

如果你的代碼組織得很差,這樣你需要使用

no Regexp::Grammars; 

注意,禁用正則表達式語法::中期範圍內,這也是可能效應no Regexp::Grammars;也在詞彙範圍內。

相關問題