#!/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