2

我非常坚持创建我需要的 perl。

我有一个文件,其中包含以下内容

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

现在我需要能够重写整个块,所以我正在考虑匹配“(`CONFM4_AST_MODULES”和“')”之间的所有内容删除它然后再次附加它。在文件的末尾。是否可以正则表达式这样的事情?如果是这样怎么办?

由于有时会发生变化,因此无法对我的 perl 脚本中的整个文本进行硬编码。

如果您对如何解决这个问题有任何其他想法,我很乐意听到它:)

文件中存在的东西的数量也从 3 变为 20。

4

1 回答 1

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;

更新:代码改进和测试。

于 2012-10-29T12:59:51.457 回答