c:\@Work\Perl\monks>perl -wMstrict -le "use Data::Dump qw(dd); ;; my $s = 'abXXcXXXXdefXXXXgXXhiXXXXXXXjkXX'; print qq{$s}; ;; my @off_len; while ($s =~ m{ X+ }xmsg) { push @off_len, [ $-[0], $+[0]-$-[0] ]; } dd \@off_len; ;; for my $ar_ol (reverse @off_len) { my ($off, $len) = @$ar_ol; substr $s, $off, $len, 'YYYYY'; } print qq{$s}; " abXXcXXXXdefXXXXgXXhiXXXXXXXjkXX [[2, 2], [5, 4], [12, 4], [17, 2], [21, 7], [30, 2]] abYYYYYcYYYYYdefYYYYYgYYYYYhiYYYYYjkYYYYY