Perlで localeを扱う

昨日のエントリの問題の解決。

コマンドラインで LANG=Cとしなくても解決できる方法が
ありました。localeをその場で変えてあげればいいだけ
でした。setlocaleという CのAPIがあるようでそれを
使えば解決できます。Perlでも同様の APIPOSIX
パッケージに含まれていました。


以下修正版

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

use POSIX qw(setlocale LC_TIME);
use Time::Piece;

my $old_locale = setlocale(LC_TIME);

setlocale(LC_TIME, "C");
my $pub_time1 = 'Sun, 07 Oct 2007 01:49:43 +0900';
my $format    = '%a, %d %b %Y %T +0900';

my $t = Time::Piece->strptime($pub_time1, $format);
print $t->strftime(), "\n";

setlocale(LC_TIME, $old_locale);

解析を行うところで一時的に LC_TIMEの localeを変更し、
処理が終了した時点で元に戻しています。

これでわからなかった問題が解決できました。