3

我正在调试一个看起来像这样(简化)的 perl 脚本:

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

use Evil::Module;

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

此脚本输出0,100(注意,而不是.)。如果我注释掉该use Evil::Module语句,输出将是0.100.

我相信这与模块中的语言环境设置有关。但是locale是一个词法编译指示(根据联机帮助页),它不在脚本中使用。这里发生了什么事?

4

2 回答 2

5

pragma 是词法的use locale,但如果 Evil::Module 模块使用POSIX::setlocale,则语言环境更改是全局的。

有关perldoc perllocale更多信息,请参阅。

于 2010-07-09T16:11:31.587 回答
1

这是perldoc perllocale的摘录,它使问题变得清晰:

write() 和 LC_NUMERIC

格式是 Perl 中唯一无条件使用来自程序语言环境的信息的部分。如果程序的环境指定了 LC_NUMERIC 语言环境,它总是用于在格式化输出中指定小数点字符。格式化输出无法控制,use locale因为 pragma 与程序的块结构相关联,并且由于历史原因,格式存在于该块结构之外。

似乎print()并且printf()具有相同的行为。

于 2010-07-09T23:30:57.157 回答