Perlで localeを扱う
昨日のエントリの問題の解決。
コマンドラインで LANG=Cとしなくても解決できる方法が
ありました。localeをその場で変えてあげればいいだけ
でした。setlocaleという CのAPIがあるようでそれを
使えば解決できます。Perlでも同様の APIが POSIX
パッケージに含まれていました。
以下修正版
#!/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を変更し、
処理が終了した時点で元に戻しています。
これでわからなかった問題が解決できました。