Ответ 1
Использование Unicode:: Sort или Unicode:: Sort:: Locale не имеет смысла. Вы не пытаетесь сортировать, основываясь на определениях Unicode, которые вы пытаетесь сортировать на основе своего языка. Для чего use locale;
.
Я не знаю, почему вы не получили желаемый порядок из cmp
под use locale;
.
Вы можете обрабатывать распакованные файлы.
for q in file1.uniqc file2.uniqc ; do
perl -ne's/^\s*(\d+) //; for $c (1..$1) { print }' "$q"
done | sort | uniq -c
Разумеется, для этого потребуется больше временного хранилища, но вы получите именно тот порядок, который вам нужен.
Я нашел случай use locale;
не вызывал Perl sort
/cmp
, чтобы получить тот же результат, что и утилита sort
. Weird.
$ export LC_COLLATE=en_US.UTF-8
$ perl -Mlocale -e'print for sort { $a cmp $b } <>' data
(
($1
1
$ perl -MPOSIX=strcoll -e'print for sort { strcoll($a, $b) } <>' data
(
($1
1
$ sort data
(
1
($1
По правде говоря, это утилита sort
, которая странная.
В комментариях @ninjalj указывает, что странность, вероятно, связана с символами с весами undefined. При сравнении таких символов порядок undefined, поэтому разные двигатели могут давать разные результаты. Лучшим вариантом для воссоздания точного порядка будет использование утилиты sort
с помощью IPC::Run3, но похоже, что это не гарантировано всегда приводят к тому же порядку.