2011-06-03 37 views
1

出于某种原因,对我来说,Perl是做字符串比较,其中使用二进制语言环境在Perl

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

计算为真。我认为这是因为我在代码中某处使用了错误的区域设置,但我不确定它在哪里(这是一个大堆栈,我不确定如何确定区域设置)。

有没有一种方法可以使用二进制排序规则或类似方法强制进行比较,以便上面的计算结果为false?

+2

这很难分辨出哪部分是事实哪一部分是你所做的假设。随着情况的提出,这太奇特了。请给出更加严格的事实以及实际代码中的比较结果。用[Devel :: Peek](http://p3rl.org/Devel::Peek)转储你的字符串,并将输出添加到你的问题。我怀疑你比较了对象而不是字符串变量,'eq'是[overload](http://p3rl.org/overload)。 – daxim 2011-06-03 20:38:58

+1

Perl源代码通常不会允许UTF-8,除非您使用“使用utf8;”附注。而eq不会使用语言环境,所以这不会有帮助。还有其他事情正在发生,发布更大的代码片段可能会有所帮助 – 2011-06-03 20:50:30

回答

0

的Perl默认为“C”区域设置,除非如LC_ALL在您的环境设置,其中CSE你可以迫使它这样的语言环境变量:

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