Próbuję uzyskać Perl i GNU/Linux sortowania (1) program uzgodnić, jak sortować ciągi Unicode. Używam sortowania z LANG=en_US.UTF-8
. W programie Perl Próbowałem następujące metody:W jaki sposób można sortować według Perla i Uniksa ciągi Unicode w tej samej sekwencji?
use Unicode::Collate
z$Collator = Unicode::Collate->new();
use Unicode::Collate::Locale
z$Collator = Unicode::Collate->new(locale => $ENV{'LANG'});
use locale
Każdy z nich nie powiodło się z następujących błędów (od strony Perl):
- Inpu t nie jest posortowana: [----] przyszedł po [($ 1]
- Wejście nie jest posortowana: [...] przyszedł po [&]
- Wejście nie jest posortowana: [($ 1] przyszedł po [1]
Jedyną metodą, która pracowała dla mnie zaangażowanych ustawienie LC_ALL=C
dla rodzaju, a przy użyciu 8-bitowych znaków w Perl. Jednak w ten sposób łańcuchy Unicode nie są poprawnie uporządkowane.
Czy nazywasz "sortowanie" poprawnie? Unicode :: Collate nie zmienia domyślnego zachowania 'sort'; musisz użyć niestandardowej funkcji porównania. – cjm
W rzeczywistości implementuję scalanie-sort w Perlu, więc nie nazywam funkcji sortowania Perla.Ale tak, używam kodu takiego jak 'print STDERR" Wejście nie jest posortowane: [klawisz $] pochodzi po [$ prev] \ n "jeśli (zdefiniowane ($ prev) && $ Collator-> cmp (klawisz $, $ prev) <0); ' –
Rzeczywisty kod Perla (dla znaków 8-bitowych) znajduje się na stronie https://github.com/dspinellis/sgsh/blob/master/sgsh-merge-sum.pl. Jest przeznaczony do łączenia wyjścia wielu 'sort | Wywołania uniq -c'. –