Reputation: 63
I have a string in the following format:
\main\stream\foo.h\3
it may have more or less "sections", but will always end with a slash followed by an integer. Other examples include:
\main\stream2309\stream222\foo.c\45
\main\foo.c\9
I need to, in Perl, increment the number at the end of the string and leave the rest alone. I found an example on this site that does exactly what I want to do (see Increment a number in a string in with regex) only the language is Javascript. The solution given was:
.replace(/\d+$/,function(n) { return ++n })
I need to do the same thing in Perl.
Upvotes: 6
Views: 3327
Reputation: 121
If you want an underscored suffix and the original string might not have a suffix:
value
value_1
value_2
...
you can use this:
$foo =~ s{_?(\d*)$}{'_'.($1 eq '' ? 1 : $1+1)}e
Upvotes: 0
Reputation: 66978
You can use the /e
regex modifier to put executable code in your replacement string.
Something like:
$string =~ s/(\d+)$/$1 + 1/e;
should work.
Upvotes: 11