使用区域设置 - 问题
当我将 locale
设置为 it_IT.UTF-8
(导出 LC_ALL=it_IT.UTF-8)并运行此脚本时,
#!/usr/bin/env perl
use warnings;
use 5.012;
use POSIX qw(strftime);
say strftime "%A %B %e %H:%M:%S %Y", localtime;
我得到以下输出:
martedì marzo 15 08:50:07 2011
但是阅读此内容(来自 < a href="http://perldoc.perl.org/perllocale.html#The-use-locale-pragma" rel="nofollow">The-use-locale-pragma ):
默认, Perl 忽略当前语言环境。 use locale pragma 告诉 Perl 使用当前区域设置进行某些操作: ... POSIX 日期格式化函数 (strftime()) 使用 LC_TIME 。
为什么我的区域设置在不使用 locale
编译指示的情况下会对 strftime 输出产生影响?
When I set my locale
to it_IT.UTF-8
(export LC_ALL=it_IT.UTF-8) and run this script
#!/usr/bin/env perl
use warnings;
use 5.012;
use POSIX qw(strftime);
say strftime "%A %B %e %H:%M:%S %Y", localtime;
I get this output:
martedì marzo 15 08:50:07 2011
but reading this (from The-use-locale-pragma ):
By default, Perl ignores the current locale.
The use locale pragma tells Perl to use the current locale for some operations:
...
The POSIX date formatting function (strftime()) uses LC_TIME .
why does my locale-setting have an influence on the strftime-output without the use of the locale
pragma?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
POSIX::strftime
是time.h
中使用当前语言环境的真实strftime
C 函数调用的薄包装器。 Perl 并没有努力使其符合要求。DateTime 有一个在 Perl 中实现的 strftime 等效项,它将符合 Perl 的语言环境编译指示。
POSIX::strftime
is a thin wrapper around the realstrftime
C function call intime.h
which uses the current locale. Perl doesn't go through the effort to make it conform.DateTime has a strftime equivalent implemented in Perl that will conform to Perl's locale pragma.