作者: dune
日時: 2005/5/24(00:12)
極悪です。

今日は 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; を書いて、その後消し
忘れてた自分もアホなんですけど(もっと早く気づけよ・・・)。
-- 
極悪