なぜかコロっと忘れていたので備忘録的にメモ。
Mooseで作成したモジュール内で、自身のプロパティやメソッドを参照したい場合、
shiftから呼び出せる。
Sample.pm
package Sample;
use Moose;
has 'hoge' => (
    is  => 'rw', 
    isa => 'Str',
    default => 'hogera' 
);
sub print_hoge(){
    print shift->hoge;
}
sub call_print_hoge(){
    shift->print_hoge();
}
__PACKAGE__->meta->make_immutable();
no Moose;
return 1;
main.pl
use Sample; my $sample = Sample->new(); print $sample->hoge; # hogera $sample->print_hoge(); # hogera $sample->call_print_hoge(); #hogera
メンバの内部参照(2011.10.12 追記)
あるメンバのdefault値を、他のメンバで使用したい場合。
被参照側のメンバに lazy = 1 を設定して、評価を遅延させる。
has 'fuga' => (
    is => 'ro', 
    isa => 'Str', 
    default => 'fugara', 
    lazy => 1
);
has 'fugaga' => (
    is => 'ro', 
    isa => 'Str', 
    default => sub{ shift->fuga; } 
);
@__gfx__ さん、ありがとうございました。
@uma_blue BUILD時にプロパティを使いたいときはlazy => 1にするといいですね! #Moose
— Fuji, Goro (@__gfx__) October 12, 2011
 
 

