in reply to Replace text in file

Maybe another possible way for you could be using perl native function substr() instead of using regular expressions. Laurent_R already explained those above ;-)

Replies are listed 'Best First'.
Re^2: Replace text in file
by Laurent_R (Canon) on Apr 17, 2014 at 10:44 UTC
    Yes, that could be used, but the problem I see with substr here is that we cannot be sure whether the version number has one or two or several digits, so you need further processing for determining that. To me, a regex substitution is simpler in this context.

      While I probably wouldn't use substr for this, I don't really see the number of (before or after) digits as being a problem. Here's a (multi-line) one-liner to explain:

      $ perl -Mstrict -Mwarnings -E ' my $find = q{#define MYVERSION }; my $flen = length $find; my @strings = ( q{#define MYVERSION 11}, q{#define MYVERSION 9}, q{#define MYVERSION 99} ); for (@strings) { say; substr($_, $flen) = substr($_, $flen) + 1; say; } ' #define MYVERSION 11 #define MYVERSION 12 #define MYVERSION 9 #define MYVERSION 10 #define MYVERSION 99 #define MYVERSION 100

      Anyway, that's all fairly academic: I'm pretty sure I would have reached for something like s/^($find)(\d+)/$1.($2+1)/e in the first instance.

      -- Ken

      "we cannot be sure whether the version number has one or two or several digits"

      Totally agree with you on that point.

      Regards