2012-02-16 3 views
1

WindowsとUnixで異なる結果を出すPerlでソートする際に問題があります。Perl - UNIXでのソートWindowsとは異なる

文字は次のとおりです。 - _私はこれとは何かを持っているロケールを推測している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

+0

これらは、Windowsの結果とはまだ異なります。私はそれをWindowsのソートに合わせる必要があります - これを行うUnixの照合はありますか? –

+0

@Mike、oo、私はWindowsもローカルを使っているのを見ています。さて、あなたのWindowsが使っているローカルなものを調べて、あなたのUNIXシステムに相当するものがあるかどうかを調べ、私が示したように 'C'の代わりに使用する必要があります。私はあなたの幸運を祈ります! – ikegami

0

あなたは、ロケールを使用するには、そのような行がなければsort

use locale; 

を含む行をコメントアウトしたくない場合Perlは、WindowsとUnixの両方で同じように動作するはずです。

また(または、より良いそれで始まるブロックにソートを囲む)sort

no locale; 

を追加することができます。

+0

スクリプトには「ロケールを使用する」というものはありません。 –

+0

@それはどこでもそれを変更するためにそれを使用する一つのモジュールです。 –

+0

@Mike:更新されました。 – choroba

関連する問題