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};


酷いっては分かるんだけど、他にいいのが思いつかない。