6

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.

3 Answers 3

11

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Too bad auto-increment is limited to strings that match /^[a-zA-Z]*[0-9]*\z/
2

Try $var =~ s/(\d+$)/($1 + 1)/e

Comments

0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.