Const::Commonというのを書いた
https://metacpan.org/release/Const-Common
プロジェクト共通の定数定義クラスを作ったりするときに、単にuse constant
だと以下の様な不満点があった。
use MyApp::Const;
とかしても定数をExportしてくれないので、MyApp::Const::CONST_HOGE
とかかくのがタルいしExportの設定を書くのもタルいuse constant CONST_HASH => +{BAR => 'BAZ'};
とかできるけど、CONST_HASH->{BAR} = 'OVERWRITE'
とかできてしまう
その辺は各プロジェクトで個別に解決していたのだが、いい加減共通化したくなって書いた。以下の様な感じで使う。
package MyApp::Const;
use Const::Common (
BAR => 'BAZ',
HASH => {
HOGE => 'hoge',
},
);
1;
このように定数定義ができ、その定数を他の場所で使うことができる。
use MyApp::Const;
print BAR; # BAZ
print HASH->{HOGE}; # hoge;
HASH->{HOGE} = 10; # ERROR!
hashrefやarrayrefはrestrictedになるので変な上書きが発生することもなくて安心。
中身は結構無理矢理なコードなんですが、こういうのがプロジェクト毎に散在してしまうよりかはCPANとかに上げてしまったほうが良いんじゃないかという具合。
また、最近はクライアント側と定数を共通化するために、定数クラスの自動生成とかやったりしてるんですが、そのためのモジュールとして、Const::Common::Generatorというものも別に書きました。
ちなみに、上記2つは、大江戸Ruby会議04の会場でバッテリーと戦いながら書き上げました。