use strict; my $val = 'http://adserver.adtech.de/' . '?addyn|2.0|323|91793|1|277|target=_blank'; my $re = qr/ .*\|.*\|.*\|.*\|.*\| (.*) (?=\|.*) # look-ahead /x; if ( $val =~ m/$re/g ) { print( "found: \"$1\"\n" ); print( "pos is: " . scalar( pos( $val ) ) . "\n" ); print( "behind pos is: \"" . substr( $val, pos( $val ) - length( $1 ), length( $1 ) ) . "\"\n" ); # perform substitution here using calculated offsets substr( $val, pos( $val ) - length( $1 ), length( $1 ) ) = "moo"; print( "$val\n" ); }