URIとURI::URLをファイルに永続化後、解凍したら動かないと言う問題に遭遇した。
これは、こいつらの保持するURI::http やURI::https が、URI::implementor で動的にロードされるため。解凍するだけだとこのメソッドは呼ばれないからねえ。
そんなわけで、
my $obj = retrive('DATAFILE');
my $uri_obj;
if($obj->isa('URI::WithBase')){
$uri_obj = $obj->[0];
}else{
$uri_obj = $obj;
}
ref($obj) =~ /^URI::(.+)/;
URI::implementor($1);
って感じで無理矢理ロードさせる必要がある。
・・・ただし。今見たら、最新の実装ではURI::http等は実体があるので、useで十分。っていうか、useはretrive がやってくれるので何もしなくてOK。便利な世の中になったのう。。。
・2005.08.16
嘘ついてました。バージョンは関係なく、Data::Dumperとevalでシリアライズ・デシリアライズしたときにuseしてくれないのが問題なだけでした・・・ごめんなさい。