2011-06-03 48 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");