mond-tech [perl]モジュールの自動リロード 忍者ブログ
焼肉屋さんが大好きです。いや、そうでも無い。 たぷたぷになってきてピンチです。
08
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

モジュールファイルに変更があった際にそのモジュールを自動で読み込みなおしたい、そんな時・・・

サーバ系やら常駐系のアプリ開発しない限りは必要性は無いと思うけれど。

CPANのModule::Reloadは、モジュールがエラーでこけると、そのモジュールの再読み込みが行われない、だとか、
モジュール再読み込みの際にどのモジュールが読み込まれたか知りたい場合それを外からハンドリング不能、
だとか、微妙なので、こんなもんは書いて、自分のライブラリに追加した方が早いと思うんだ、わたくし。


sub module_reload {
my %reloaded = ();
for (keys %INC) {
my $lm = -M $INC{$_};
my $path = $INC{$_};
$lm == $LAST_MODIFY{$_} and next;
if ($LAST_MODIFY{$_}) {
delete $INC{$_};
eval { require $path; };
if ($@) { $INC{$_} = $path; warn $@; }
else { $reloaded{$_} = $path; }
}
$LAST_MODIFY{$_} = $lm;
}
return %reloaded ? \%reloaded : undef;
}

if (my $target = module_reload) {
warn 'RELOADED: ' . Dumper $target;
}


こんな感じで。

%INCには読み込み済みのモジュール情報が詰まってる。
Keyには、パッケージ名をファイルパスに直した謎フォーマットのデータ、
Valueには、パッケージへのファイルフルパス。
それをぶん回して最終更新日をチェックするだけ、と言う代物。まぁ、何とも単純。

返り値は、再読み込みしたモジュールがあれば、
その情報をINCのKey-Valueそのままにハッシュのリファレンスで返す。
無ければundef。

そーんなかんじでー。よろぴこめかどっく。
PR
お名前
タイトル
文字色
URL
コメント
パスワード
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
Trackback URL
Copyright c mond-tech All Rights Reserved
忍者ブログ / [PR]
にほんブログ村 IT技術ブログ Webサイト構築へ