use Modern::Perl; my @patterns = qw/GAATTC CCWGG/; while ( my $sequence = ) { my @matches; while ( $sequence =~ m/($patterns[0]|$patterns[1])/g ) { for my $expr ( 1 .. $#- ) { push @matches, $-[$expr] .. $+[$expr] - 1; } } say "@matches"; } __DATA__ GAATTCACGGATAGCCWGGTACGATGATAGATGAATTCGACTAGAATGCCWGGAAGAATgGAATTC GAATTCACGGATAGCCWGGTACGATGATAGATGAATTCGACTAGAATGCCWGGAAGAATgGAATTC GAATTCACGGATAGCCWGGTACGATGATAGATGAATTCGACTAGAATGCCWGGAAGAATgGAATTC #### 0 1 2 3 4 5 14 15 16 17 18 32 33 34 35 36 37 48 49 50 51 52 60 61 62 63 64 65 0 1 2 3 4 5 14 15 16 17 18 32 33 34 35 36 37 48 49 50 51 52 60 61 62 63 64 65 0 1 2 3 4 5 14 15 16 17 18 32 33 34 35 36 37 48 49 50 51 52 60 61 62 63 64 65