У меня есть приложение для викторины, в котором я сопоставляю то, что люди вводят с правильным ответом. На данный момент, что я делаю в основном это:
if ($input =~ /$answer/i) {
print "you won";
}
Это хорошо, как будто ответ «рыба», пользователь может набрать «рыба» и считать хороший ответ.
Проблема, с которой я сталкиваюсь, заключается в том, что мои пользователи, так как я француженка, и я хотел бы иметь возможность принимать, скажем, пользователя, набирающего «taton», а ответ «tâton». 1006 *
Итак, что я мог сделать, это:
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/
истинными.