Как я могу игнорировать акценты при сравнении строк в 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/
быть правдой.