2011-06-03 4 views
1

Pour une raison quelconque, pour moi, Perl fait des comparaisons de chaîne oùen utilisant un binaire locale en Perl

if ("hãt" eq "hat") 

valeur TRUE. Je pense que c'est parce que j'utilise le mauvais endroit quelque part dans mon code mais je ne sais pas où (c'est une grosse pile et je ne suis pas sûr de savoir comment déterminer les paramètres régionaux).

Existe-t-il un moyen de forcer une comparaison en utilisant un classement binaire ou quelque chose de similaire, de sorte que ce qui précède est évalué à faux?

+2

Il est difficile de dire quelle partie est un fait et quelle partie est une hypothèse faite par vous. Comme la situation est présentée, c'est trop bizarre aussi croire. S'il vous plaît donnez des faits plus durs et comment la comparaison ressemble dans le code réel. Vider vos chaînes avec [Devel :: Peek] (http://p3rl.org/Devel::Peek) et ajouter la sortie à votre question. Je soupçonne que vous comparez des objets au lieu de variables de chaîne et 'eq' est [overload] (http://p3rl.org/overload) ed. – daxim

+1

La source Perl n'autorise normalement pas UTF-8 de toute façon, sauf si vous utilisez "utf8 use"; pragma. Et eq n'utilise pas les paramètres régionaux de toute façon, donc cela ne va pas aider. Il y a quelque chose d'autre qui se passe, et poster un plus gros fragment de code peut aider –

Répondre

0

par défaut Perl à la locale « C » à moins qu'une variable locale telle que LC_ALL est défini dans votre environnement, dans lequel cse vous pouvez forcer comme ça:

use POSIX; 
setlocale(LC_ALL, "C"); 
Questions connexes