2012-10-29 85 views
2

我非常堅持創建一塊我需要的Perl。perl替換文本塊

我有一個包含以下

define(`CONFM4_AST_MODULES', `NOLOAD => app_thingie.so 
    NOLOAD => app_thingie2.so 
    NOLOAD => app_thingie3.so') 

現在我需要能夠改寫這個整個塊,所以我想的一切就是與匹配「(`CONFM4_AST_MODULES」和「')」文件刪除它,然後再附加它。在文件的末尾。 是否可以將這樣的事情正則表達?如果是的話如何?

不可能在我的perl腳本中對整個文本進行硬編碼,因爲它有時會發生變化。

如果您有關於如何解決這個我喜歡聽到吧:)

也存在於從3文件更改爲20

回答

2

一樣的東西的數量任何其他的想法是,它是可能。你可以閱讀整個文件到一個變量做替換:

my $var = do { local $/; <> };       # Read in the file. 
my $re = qr/(define\(`CONFM4_AST_MODULES',[^)]+\)\n?)/; # How to search for the defines. 
my @defs = $var =~ /$re/g;        # Remember the defines. 
$var =~ s/$re//g;          # Remove them. 
print $var, @defs; 

更新:代碼改進和測試。

+0

你能否解釋一下「join q(),<>;」部分呢? 我假設$ var已經被這個例子中的文字填滿了。 – Hydrosine

+0

不,''''從文件中讀取行,'join'從它們中創建一個字符串。 – choroba

+0

@Hydrosine:我用更傳統的成語更新了代碼。 – choroba