最近見つけたモジュール
Class::Data::Inheritable::Translucent
なかなかいいっす。
Class::Data::Inheritableと同じくパッケージごとに値を格納できるんだけど
さらにオブジェクトごとにも値を保持できるんです。
package HOGE; use strict; use base qw( Class::Data::Inheritable::Translucent ); __PACKAGE__->mk_translucent('hoge','foo'); print HOGE->hoge; # foo my $obj = HOGE->new; $obj->hoge('bar'); print $obj->hoge; # bar print HOGE->hoge; # foo
ってな感じ。
何が便利かって言うとパッケージで設定する値とオブジェクトで設定する値を分離できるってこと。
前まではそーゆーの作るときって別々の管理の仕方でやってたのでなんだか二度手間だなぁと感じてた。今度からはこれ使えば解決だね。
んで一応前提条件としてハッシュのリファレンスでblessしないといけないんだけどそれはattrs()ってメソッドをオーバーライドすれば任意のリファレンスとかでもOKなのがクール。
あえてダメダシするなら名前が長いとこかなーw