#!/usr/bin/perl use strict; while( 1 ) { my $valid= or exit( 0 ); chomp( $valid ); my $dirty= or die "Missing second sequence"; chomp( $dirty ); $valid =~ s#(...)#(.*?)\Q$1\E#g; my @intron= $dirty =~ /^$valid(.*?)/; for my $intron ( @intron ) { next if ! length($intron); print "$intron\n"; } } __END__ ATGGAGTCGACGAATTTGAAGAAT GCACCGATGGAGTAGGTCGACGATCTCAATTTGTCGAAGAAT #### #!/usr/bin/perl use strict; while( 1 ) { my $valid= or exit( 0 ); chomp( $valid ); my $dirty= or die "Missing second sequence"; chomp( $dirty ); print "Comparing $valid\nto $dirty\n"; my $dlen= length( $dirty ); $dirty .= $valid; $valid =~ s#(...)#(.*?)\Q$1\E#g; my @intron= $dirty =~ /^$valid(.*?)/ or die "Ouch! We backtracked"; if( $dlen < $+[0] ) { print "No match.\n"; } else { for my $intron ( @intron ) { next if ! length($intron); print "$intron\n"; } } } __END__ ATGGAGTCGACGAATTTGAAGAAT GCACCGATGGAGTAGGTCGACGATCTCAATTTGTCGAAGAAT ATGGAGTCGACGAATTTGAAGAAT GCACCGATGGAGTAGGTCGACGATCTCAATTTGTCGAAGACT #### #!/usr/bin/perl use strict; my $maxCodons= 2; while( 1 ) { my $valid= or exit( 0 ); chomp( $valid ); my $dirty= or die "Missing second sequence"; chomp( $dirty ); print "Comparing $valid\nto $dirty\n"; my $dlen= length( $dirty ); $dirty .= $valid; my $pos= 0; while( "" ne $valid ) { my $part= substr( $valid, 0, 3*$maxCodons, "" ); $part =~ s#(...)#(.*?)\Q$1\E#g; pos($dirty)= $pos; my @intron= $dirty =~ /\G$part/ or die "Ouch! We backtracked"; $pos= $+[0]; if( $dlen < $pos ) { print "Match was not complete.\n"; $valid= ""; } else { for my $intron ( @intron ) { next if ! length($intron); print "$intron\n"; } } if( "" eq $valid && $pos < $dlen ) { print substr( $dirty, $pos, $dlen-$pos ), $/; } } } __END__ ATGGAGTCGACGAATTTGAAGAAT GCACCGATGGAGTAGGTCGACGATCTCAATTTGTCGAAGAATTGG ATGGAGTCGACGAATTTGAAGAAT GCACCGATGGAGTAGGTCGACGATCTCAATTTGTCGAAGACTTGG #### #!/usr/bin/perl use strict; while( 1 ) { my $valid= or exit( 0 ); chomp( $valid ); my $dirty= or die "Missing second sequence"; chomp( $dirty ); print "Comparing $valid\nto $dirty\n"; my $pos= 0; while( "" ne $valid ) { my $codon= substr( $valid, 0, 3, "" ); my $next= index( $dirty, $codon, $pos ); if( $next < 0 ) { print "Match was not complete.\n"; last; } if( $pos < $next ) { print substr( $dirty, $pos, $next-$pos ), $/; } $pos= $next + 3; if( "" eq $valid && $pos < length($dirty) ) { print substr( $dirty, $pos ), $/; } } } __END__ ATGGAGTCGACGAATTTGAAGAAT GCACCGATGGAGTAGGTCGACGATCTCAATTTGTCGAAGAATTGG ATGGAGTCGACGAATTTGAAGAAT GCACCGATGGAGTAGGTCGACGATCTCAATTTGTCGAAGACTTGG