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
と、いまだに使いこなせてない人のメモでした。


*追記
最初の問題について。


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

roなヤツはくっくぶっくでも直接代入でやってんじゃんorz
というわけで、次はMooseでハッシュ使う方法調べよう。