2013-08-06 15 views
5

Czy Perl po prostu porównuje wartości ASCII każdego znaku każdego łańcucha, dopóki nie umieści jednego przed drugim lub czy język porówna ciągi w inny sposób?W jaki sposób Perl porównuje ciągi pod maską?

+1

Może to być bardzo skomplikowane, jeśli myślisz o ustawieniach regionalnych i sortowaniu. http://perldoc.perl.org/perlop.html#Equality-Operators "lt", "le", "ge", "gt" i "cmp" korzystają z porządku sortowania określonego przez bieżące ustawienia narodowe, jeśli używane jest starsze użycie ustawień narodowych (ale nie używa się ustawień narodowych ": not_characters"). Zobacz perllocale. Nie mieszaj ich z Unicode, tylko ze starszymi kodowaniami binarnymi. Standardowe moduły Unicode :: Collate i Unicode :: Collate :: Locale oferują znacznie wydajniejsze rozwiązania problemów z sortowaniem. – Thilo

+4

@Thilo Czy możesz zrobić z tego odpowiedź? – Taymon

Odpowiedz

1

Perl does take your current locale into account i używa kolejności sortowania zdefiniowanej przez te ustawienia narodowe. Uwzględnia to nie tylko zestawy znaków (takie jak ASCII), ale także języki. Na przykład słowa są sortowane inaczej po francusku niż po niemiecku, itd.

+0

Nie sądzę, że pytający mówi o sortowaniu, ale prostym $ foo eq $ bar. –

Powiązane problemy