2

我想创建一个小的 perl 脚本,它会在 c++ 标头中找到某个声明来修改它。到目前为止,我已经能够创建“查找”部分:

my $buildFile = "..\\Support\\BuildVersion.h";

my @result;
open( File, $buildFile ) or die "Can't open $buildFile.\n";
@result = <File>;
close( File );

print "Updating build version...\n";

open( NEWFOUT, ">", "$buildFile" ) or die "Can't open $buildFile.\n";
foreach( @result )
{
    print $_;
    if( $_ =~ m/#define BUILD_COUNT [0-9]+/ig )
    {
        $_ =~ s/$_/#define BUILD_COUNT 77/;

    }
}
print NEWFOUT @result;
close( NEWFOUT );

所以在我的 c++ 文件中,我有这个名为BUILD_COUNT. 我想在每次构建我的解决方案之前调用这个脚本,以便它将后面的值增加 1 BUILD_COUNT。我怎么能那样做。

4

2 回答 2

10

单行应该就足够了。

perl -i -pe 's/#define BUILD_COUNT \K(\d+)/$1 + 1/e' yourfile

在没有备份的情况下使用 -i 开关是危险的,但我觉得这就是你想要的。为了更安全,但不完整,请使用-i.bak.

-p 开关将打开并读取参数文件,替换运算符上的 /e 选项将导致在插入替换表达式之前对其进行评估。逃跑将导致它之前的\K任何东西被保留。

于 2012-10-16T15:50:33.613 回答
0

使用括号将版本捕获到 $1 并在打印前递增

if( $_ =~ m/#define BUILD_COUNT ([0-9]+)/ig )
{
    my $v = $1 + 1;
    $_ =~ s/$_/#define BUILD_COUNT $v/;

}
于 2012-10-16T15:51:10.773 回答