in reply to Re^4: regex question
in thread regex question

That happens because your second capture, held in $2, is "123" so in your substitution inside the if $2 is interpolated to give s/123/something/, which runs quite happily and replaces the first occurence of "123" in $string. Had your string been "987 123 345" your code would have given the result you wanted but only as a side effect of your error. You could do it like this (not tested)

use strict; use warnings; my $string = q{123 123 345}; if ( $string =~ s{^(\d+\s+)(?:\d+)(\s+\d+)}{$1something$2} ) { print qq{Succeeded\n$string\n}; } else { print qq{Failed\n$string\n}; }

I hope this makes things a bit clearer.

Cheers,

JohnGG