#! perl -slw use strict; use List::Util qw[ reduce ]; # PAIR: ##Removed after testing while( my $haystack = ) { $haystack =~ s[^\s*(\S+?)\b.*$][$1]s; ## Strips comments ( my $needle = ) =~ s[^\s*(\S+?)\b.*$][$1]s; print "\nSearching: $haystack\nfor\t: $needle\n"; ( $haystack, $needle ) = ( $needle, $haystack ) if length( $haystack ) < length( $needle ); ## Reversed ## Try for a straight match while( $haystack =~ m[$needle]g ) { printf "$haystack\n%s%-*s\n\n" , '_' x (pos( $haystack ) - length( $needle )) , length( $haystack ) , $needle; ## next PAIR; ## Removed after testing } ## No joy, so try for a left-right partial. my $re_left = reduce{ "$a$b?" } split '', $needle; my $re_right = reduce{ "$a?$b" } split '', $needle; my $re = qr[(($re_left)(.*?)($re_right))]; while( $haystack =~ m[$re]g ) { printf "$haystack\n%s%-*s%s%*s\n\n" , '_' x ( pos( $haystack ) - length( $1 ) ) , length( $2 ) , lc($2) , '-' x length( $3 ) , length( $4 ) , $4; # next PAIR; ## Removed after testing } } __DATA__ MAAGAAAAFAAAATTTTTTTTFTTTTTTTTTTTTAAAAEAAAARAAAAAA # 1. sequence TTTTTTTTFTTTTTTTTTTTT # 2. sequence AAAAEAAAARGAAATTTTFTTTTTTTTTTTTTTTTAAAAAAAAILVAAAAAAAA # 1. sequence TTTTFTTTATTTTTTDTTTTT # 2. sequence AAAAAAAAAAAAATTGTTTTTTTXXXXXTTTTTTTTTTMAAAAAAAAAAAAAAAA # 1. sequence TTGTTTTTTTTTTTTTTTTTM # 2. sequence TTTTTTTTTTTTTTTTTTTT # 1. sequence AAAAAAAAAAAATTTTTTTTTTTTTTTTTTTTTAAAAAAAAAAAAAAAA # 2. sequence AAAAAAAAAAATTTTTTTTGGGGGGGGGGGGGGGGGGGGGTTTTTTTTTAAAAAAA # 1.sequence TTTTTTTTGGGNNGGGEEGGGEGGGGGGTTTTTTTTT # 2. Sequence