我的操作系统是波兰语。我需要用perl脚本用英文打印月份名称。
区域设置:
LANG=pl_PL.UTF8
LANGUAGE=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=pl_PL.UTF-8
LC_TIME="pl_PL.UTF8"
LC_COLLATE="pl_PL.UTF8"
LC_MONETARY=pl_PL.UTF-8
LC_MESSAGES="pl_PL.UTF8"
LC_PAPER=pl_PL.UTF-8
LC_NAME=pl_PL.UTF-8
LC_ADDRESS=pl_PL.UTF-8
LC_TELEPHONE=pl_PL.UTF-8
LC_MEASUREMENT=pl_PL.UTF-8
LC_IDENTIFICATION=pl_PL.UTF-8
LC_ALL=
脚本:
#!/usr/bin/perl -w
use strict;
use POSIX;
print strftime "%b %d, %Y", gmtime(time());
输出:kwi 11, 2018
预期:Mar 11, 2018
是否有比s/kwi/Mar/
更智能的解决方案?
答案 0 :(得分:3)
POSIX :: setlocale是你需要的
#!/usr/bin/perl -w
use strict;
use POSIX qw(setlocale strftime);
print strftime "%a %b %d, %Y", gmtime(time());
setlocale(POSIX::LC_ALL,'en_US.utf8');
print strftime "%a %b %d, %Y", gmtime(time());
setlocale(&POSIX::LC_ALL,'de_DE.utf8');
print strftime "%a %b %d, %Y", gmtime(time());
perldoc POSIX应提供其他信息。另请参阅this有关设置和重置区域设置的信息。