Perl - сортировка в UNIX отличается от Windows - PullRequest
1 голос
/ 16 февраля 2012

У меня проблемы с сортировкой в ​​Perl, которые приводят к разным результатам в Windows и Unix.

Символы: a - _ 1 2

In Windows: _ 1 2 - a
In Unix: _ - 1 2 a

Я предполагаю, что локаль как-то связана с этим - что я могу сделать, чтобы сортировка Unix соответствовала сортировке Windows?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

В документах сказано:

*** ПРЕДУПРЕЖДЕНИЕ *** Локаль, указанная средой, влияет на порядок сортировки.Установите LC_ALL = C, чтобы получить традиционный порядок сортировки, который использует собственные значения байтов.

, поэтому используйте

LC_ALL=C sort ...

Пример:

$ perl -E'say for @ARGV' a - _ 1 2 | LC_ALL=en_US.UTF-8 sort
_
-
1
2
a

$ perl -E'say for @ARGV' a - _ 1 2 | LC_ALL=C sort
-
1
2
_
a
0 голосов
/ 16 февраля 2012

Если вы не хотите использовать локаль, закомментируйте строку, содержащую

use locale;

Без такой строки sort в Perl должен вести себя одинаково как в Windows, так и в Unix.

Вы также можете добавить

no locale;

перед sort (или, лучше, заключить сортировку в блок, начиная с него).

...