my $s1 = 'abcdefghijklmnopqrstuvwxyzabcdefgab'; my $s2 = 'abcdefgab'; my $MIN_LENGTH = 2; my @subseq = (); for my $i (0..length($s2)-$MIN_LENGTH) { for my $j ($MIN_LENGTH..length($s2)-$i) { push @subseq, substr($s2,$i,$j); } } print "$_\n" for @subseq; @subseq = sort{length($b)<=>length($a)}@subseq; SUBSEQ: for my $subseq (@subseq) { for my $i (0..length($s1)-length($subseq)) { if ($subseq eq substr($s1,$i,length($subseq))) { print "Match $subseq @ $i\n"; #last SUBSEQ } } }