極悪です。
今日は localtime で1時間悩んでしまいました。
use Time::localtime; すると CORE::localtime() がオーバー
ライドされて (localtime())[2] の代わりに localtime->hour()
と書けるようになります。これはスカラーコンテキストでの意図
した動作っぽいのですが、実はリストコンテキストでも
use Time::localtime; した場合は常にスカラー(リファレンス)
を返すようになります。Time::localtime::localtime() がコンテ
キストを見てないのが原因なので、Time::localtime.pm の中身が
sub populate (@) {
return unless @_;
return @_ if wantarray; # この行を追加
my $tmob = Time::tm->new();
@$tmob = (
$tm_sec, $tm_min, $tm_hour, $tm_mday,
$tm_mon, $tm_year, $tm_wday, $tm_yday,
$tm_isdst )
= @_;
return $tmob;
}
sub localtime (;$) { populate CORE::localtime(@_ ? shift : time)}
となってれば良さそうです。もちろん、もっと正しいのは CORE と
互換性がない関数を勝手に export するなっ、ってことなんすけど
ね。Time::HiRes::time ですら勝手には export しないんだし。
ま、何かの拍子に use Time::localtime; を書いて、その後消し
忘れてた自分もアホなんですけど(もっと早く気づけよ・・・)。
--
極悪