3

私は次のようなperlスクリプトをデバッグしています(簡略化):

#!/usr/bin/perl    
use strict;
use warnings;

use Evil::Module;

printf "%.3f\n", 0.1;

このスクリプトは出力します(の代わりに0,100注意してください)。ステートメントをコメントアウトすると、出力はになります。,.use Evil::Module0.100

これはモジュールのロケール設定に関係していると思います。ただし、ロケールは(マンページによると)字句プラグマであり、スクリプト内では使用されません。ここで何が起こっているのですか?

4

2 に答える 2

5

プラグマは語彙的ですが、use localeEvil::Module モジュールが を使用するPOSIX::setlocale場合、ロケールの変更はグローバルです。

詳細については、を参照perldoc perllocaleしてください。

于 2010-07-09T16:11:31.587 に答える
1

問題を明確にするperldoc perllocaleからの抜粋を次に示します。

write() と LC_NUMERIC

フォーマットは、プログラムのロケールからの情報を無条件に使用する Perl の唯一の部分です。プログラムの環境で LC_NUMERIC ロケールが指定されている場合、書式設定された出力で小数点文字を指定するために常に使用されます。use localeプラグマはプログラムのブロック構造に関連付けられており、歴史的な理由から、フォーマットはそのブロック構造の外に存在するため、フォーマットされた出力を制御することはできません。

print()printf()は同じ動作をしているようです。

于 2010-07-09T23:30:57.157 に答える