Можно использовать регулярные выраженияВо время теста этого метода со словарем Зализняка (108000 слов) скорость
поиска опечаток составляла около 60000 слов в секунду.
#------------------------
#!/usr/bin/perl
#слово, которое проверяем
$query="парвоз";
#массив со словарём
@words=("пароход","паровоз","самолёт"); # и т.д.
foreach $word(@words) {
if ($word =~/^(п(.{0,2})рвоз|па(.{0,2})воз|пар(.{0,2})оз|парв(.{0,2})з|парво(.{0,2}))$/) {
print "$1"; #здесь и будет "паровоз"
} #/if;
elsif ($word =~/^(п(.{0,3})воз|па(.{0,3})оз|пар(.{0,3})з|парв(.{0,3}))$/) {
print "$1"; #здесь тоже будет "паровоз"
} #/elsif;
} #/foreach;
#------------------------
Как загнать "парвоз" в регулярное выражение (с помощью цикла!) подумай сам.