Да просто программеры переборщили с изяществом и лаконичностью кода. Бага тут:
my ($Mark, $i);
for (@Data) {
s/[\\n\\r]//go;
$_ = Convert::Cyrillic::toLower ($_, $Code);
for (split (/[\\.\\,\\-\\s\\:\\;\\?\\!\\\'\\"\\(\\)\\d<>]+/o)) {
for $i (0..length ()-$PairSize) {
$Mark += ${$Table} {substr ($_, $i, $PairSize)};
}
}
}
$Mark;
Это файл /usr/local/lib/perl5/site_perl/5.8.2/Lingua/DetectCharset.pm
со строки 85. Как его изменить чтоб все работало нормально я так и не догнал. Суть здесь в замене содержимого по Таблице, при этом замена идет букв по парам, типа "ЧА" - заменяется на 2 и т.п. Таблица соответствий содержится в ссылке на хэш $Table, здесь как видите происходит какое-то убогое разыменовывание ( ${$Table} {substr ($_, $i, $PairSize)}) логичней было бы так:
$Table->{substr ($_, $i, $PairSize)}. Но это не решает проблемы.
Короче - тут надо сообща подумать.