catalystで定数をどうやって持たせよう
catalystで定数の扱い方に悩む。
簡単なのはuse constantだが、
package MyApp::Constant; use strict; use warnings; use base "Exporter"; our @EXPORT = qw/ SCA ARR HAS /; use constant SCA => 'hoge'; use constant ARR => qw/hoge huga foo bar/; use constant HAS => (hoge => 1, huga => 2,);
こうやると、
- Constantって名前が嫌。「C」って打ってTAB打ったときにConで止まるのが嫌だ
- ConstantよりReadonly推奨らしい
Readonly使おうとすると、
sub CAR { Readonly my %CAR => ( 1 => 'move', 2 => 'sedan', 3 => 'benz', ); return \%CAR; }
みたいに、定義した値を返すサブルーチンを延々書くくらいしか思いつかん。
悪い頭で考えた結果、
package MyApp::Readonly; use strict; use warnings; use Readonly; use base "Exporter"; our @EXPORT = qw/ READONLY /; Readonly my $READONLY => { sca => "kore hoge", has => {key1 => "v1",key2 => "v2",}, arr => [qw/ho ge hu ga fo ba/], }; sub READONLY { $READONLY }
use MyApp::Readonly; use Read; p READONLY->{sca}; p READONLY->{has}; p READONLY->{arr};
酷いっては分かるんだけど、他にいいのが思いつかない。