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 #### Looking for '.LLL' in '.LLL..RRR' Found at offset 0 THAETURQU .LLL..RRR ^^^^ - THAE Looking for '.LLL' in '.LLL...LL.RRR' Found at offset 0 JURYATAUTIOPW .LLL...LL.RRR ^^^^ - JURY Looking for '.LLL' in 'L..L..LLLL.LL.R..L.LLLL' Found at offset 5 TURIWOWQNQQUTYRIOPWMNHF L..L..LLLL.LL.R..L.LLLL ^^^^ - OWQN Found at offset 18 TURIWOWQNQQUTYRIOPWMNHF L..L..LLLL.LL.R..L.LLLL ^^^^ - WMNH Looking for 'LLLL' in '.LLL..RRR' Looking for 'LLLL' in '.LLL...LL.RRR' Looking for 'LLLL' in 'L..L..LLLL.LL.R..L.LLLL' Found at offset 6 TURIWOWQNQQUTYRIOPWMNHF L..L..LLLL.LL.R..L.LLLL ^^^^ - WQNQ Found at offset 19 TURIWOWQNQQUTYRIOPWMNHF L..L..LLLL.LL.R..L.LLLL ^^^^ - MNHF Looking for '.RRR' in '.LLL..RRR' Found at offset 5 THAETURQU .LLL..RRR ^^^^ - URQU Looking for '.RRR' in '.LLL...LL.RRR' Found at offset 9 JURYATAUTIOPW .LLL...LL.RRR ^^^^ - IOPW Looking for '.RRR' in 'L..L..LLLL.LL.R..L.LLLL' Looking for 'RRRR' in '.LLL..RRR' Looking for 'RRRR' in '.LLL...LL.RRR' Looking for 'RRRR' in 'L..L..LLLL.LL.R..L.LLLL'