use strict; use warnings; use 5.010; my @searches = qw{ .LLL LLLL .RRR RRRR }; chomp( my @lines = ); foreach my $search ( @searches ) { my $rxSearch = qr{(?=\Q$search\E)}; my $length = length $search; foreach my $line ( @lines ) { my ( $string, $mask ) = split m{\s+}, $line, 2; say qq{Looking for '$search' in '$mask'}; while ( $mask =~ m{$rxSearch}g ) { my $pos = pos $mask; my $ind = q{ } x length $mask; substr $ind, $pos, $length, q{^} x $length; say qq{ Found at offset $pos}; say qq{ $string\n $mask}; say qq{ $ind - @{ [ substr $string, $pos, $length ] }}; } } } __DATA__ THAETURQU .LLL..RRR JURYATAUTIOPW .LLL...LL.RRR TURIWOWQNQQUTYRIOPWMNHF L..L..LLLL.LL.R..L.LLLL