my @find = map { [ split // ] }qw ( ABCDE FGHJJ KLMMM ); my $find_len = 5; my $fuzzy = 2; while( my $search = ) { chomp $search; # this should be in C with pointers for speed, not messing with perl arrays my $search = [split //, $search]; for my $i ( 0..@$search-$find_len ) { FIND: for my $find ( @find ) { my $misses = 0; for my $j ( 0..$find_len-1 ) { $misses++ if $search->[$i+$j] ne $find->[$j]; next FIND if $misses > $fuzzy; } print "Str $. Match ($misses) miss for @$find at $i\n"; } } } __DATA__ ABCDEFGHIJKLMNOPQRSTUVWXYZ AAABBCDEFGHIJKLMN