MooseのHashRefはroでも値を変更できる?
package Mooooose; use Moose; has 'mod_name' => (is => 'rw', isa => 'Str'); has 'init_val' => (is => 'ro', isa =>'HashRef', default => sub{ _decode() }); sub _decode { my %hage = (hoge=>'1'); \%hoge; } package main; use Mooooose; my $mos = new Mooooose({ mod_name => 'main' }); print print $mos->init_val->{hoge}; # 1 print $mos->init_val->{hoge} = 3; print print $mos->init_val->{hoge}; # 3
って感じで値がかわっちゃうー。
リファレンスに入れてるから当然なのか?
ちなみにこうやると普通にエラーになる。
セッター介してじゃなくて直接入れた場合はイけちゃうってことか。
$mos->init_val({hoge=>2});
普通にハッシュ使う場合ってIsaは何になるのかな。
Object?
でもそうなると、セッターとかどうやって定義するんだろw
と、いまだに使いこなせてない人のメモでした。
*追記
最初の問題について。
roなヤツはくっくぶっくでも直接代入でやってんじゃんorz
package Point;use Moose;
has 'x' => ( isa => 'Int', is => 'ro' );
has 'y' => ( isa => 'Int', is => 'rw' );sub clear {
my $self = shift;
$self->{x} = 0;
$self->y(0);
}
というわけで、次はMooseでハッシュ使う方法調べよう。