Как я могу игнорировать акценты при сравнении строк в Perl?

У меня есть это приложение викторины, где я сопоставляю, что люди вводят с правильным ответом. На данный момент я делаю следующее:

if ($input =~ /$answer/i) {
     print "you won";
}

Это хорошо, как будто ответ «рыба», пользователь может набрать «рыба» и считается хорошим ответом.

Проблема, с которой я сталкиваюсь, заключается в том, что мои пользователи, так как я француз, и я хотел бы иметь возможность принимать, скажем, пользователя, набирающего «татон», а ответ «татон».

Итак, что я мог сделать, это:

use POSIX qw(locale_h);
use locale;
setlocale(LC_TYPE, "fr_FR.ISO8859-15");
setlocale(LC_COLLATE, "fr_FR.ISO8859-15");

И в моей процедуре проверки сделайте:

$input = lc($input);
$input =~ tr/àáâãäåçèéêëìíîïñòóôõöùúûüýÿ/aaaaaaceeeeiiiinooooouuuuyy/;

и что-то аналогично с ответом.

Мне это не нравится, потому что мне приходится жестко кодировать вещи, и в тот день, когда я решил, что покидаю мир ISO-8859-15 для мира UTF-8, я обречен.

Итак, я ищу способ сравнить строки, которые сделают"tâton" eq "taton", "maçon" eq "macon" или же"macon" =~ /maçon/ быть правдой.

Ответы на вопрос(2)

Ваш ответ на вопрос