2012-02-16 50 views
1

我在Perl中排序的問題在Windows和Unix中有不同的結果。Perl - 在Windows中排序與Windows不同

的字符爲:A - _ 1 2

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

我猜的語言環境有事情做與此 - 我能做些什麼來使Unix的排序匹配Windows排序?

謝謝!

回答

2

文檔說:

***警告***環境指定的區域設置會影響排序順序。設置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

對文本的代碼點排序最好是可疑的。 – tchrist 2012-02-16 03:42:40

+0

這些與Windows中的結果仍然不一樣。我需要它匹配Windows的排序 - 在Unix上有一個排序規則會做到這一點嗎? – 2012-02-16 16:58:41

+0

@Mike,oo,我發現Windows也使用本地。那麼,你必須找出你的Windows使用的是什麼本地的,並且看看你的unix系統上是否有相應的一個,並且如我所展示的那樣使用它來代替'C'。祝你好運! – ikegami 2012-02-16 18:32:26

0

如果你不想使用的語言環境中,註釋掉含

use locale; 

行沒有這樣的線路,sort在Windows和Unix上,Perl的表現應該相同。

您還可以添加

no locale; 

sort之前(或者,更好的,封閉的排序爲開始與它的塊)。

+0

我在腳本中沒有「使用語言環境」。 – 2012-02-16 16:58:03

+0

@Mike只需要一個模塊就可以在任何地方改變它。 – 2012-02-16 21:57:27

+0

@Mike:已更新。 – choroba 2012-02-17 08:17:29