Date::Simple が local $ENV{TZ} をさしかえててタイムゾーンがかわっちゃう件
Date::Simple#format
が内部で
local $ENV{TZ}='UTC+0';
POSIX::strftime(...);
のようにしており、Date::Simple#format
の呼出以後でタイムゾーンが UTC にかわってしまうという問題がよくしられている。
この問題は、そういえば最近は話題にあがらないなあ、とおもっていろいろ調べたところ、これは Perl 本体の issue と判断されて、perl 5.8.9 の時点で修正されていた。
On some systems, changes to C<$ENV{TZ}> would not always be
respected by the underlying calls to C<localtime_r()>. Perl now
forces the inspection of the environment on these systems.
該当のコミットはこれ。 http://perl5.git.perl.org/perl.git/commitdiff/8572b25d
まとめると、local $ENV{TZ}
を利用する場合には Perl 5.8.9 or later を依存として指定しておけばよいようだ。
(どうしてもそれ以下をサポートしたい場合は、明示的に tzset をよんで restore を明示的にかければいいけど無駄感ある)