如何Time::Piece->strftime強制根據特定語言環境而不是根據當前語言環境輸出周和月的名稱?
設定$ENV{LC_ALL}為特定的語言環境(例如,C.UTF-8)似乎不起作用。
以下測驗腳本
#!/usr/bin/env perl
$ENV{LC_ALL} = "C.UTF-8";
use strict;
use warnings;
use Time::Piece;
my $s1 = "Mon, 26 Sep 2022";
my $format = "%a, %d %b %Y";
my $d = Time::Piece->strptime($s1, $format);
my $s2 = $d->strftime($format);
if ($s1 eq $s2) {
print("OK: '$s1' == '$s2'\n");
} else {
die("ERROR: '$s1' != '$s2'\n");
}
在例如fr_CH.UTF-8環境中運行時失敗:
$ LC_ALL=fr_CH.UTF-8 ./test-strftime.pl
ERROR: 'Mon, 26 Sep 2022' != 'lun, 26 sep 2022'
uj5u.com熱心網友回復:
Perl 依賴 glibc 來擴展這些格式,并且它只在啟動期間初始化語言環境定義。POSIX::setlocale()您可以在運行時使用您選擇的語言環境強制重新初始化,但要注意這是一個真正的全域操作,在 Perl 5.28 之前它甚至可能影響其他執行緒。
示例(而不是$ENV{LC_ALL} = "C.UTF-8"):
use POSIX qw(locale_h);
setlocale(LC_ALL, "C.UTF-8");
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/513186.html
標籤:perl语言环境时间
下一篇:按名稱參考包
