なぜかコロっと忘れていたので備忘録的にメモ。
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