デフォルト値 (default/lazy/builder)
package User;
use Mouse;
use Time::Piece;
has sei => ( is => 'rw', isa => 'Str', default => 'yamada' );
has mei => ( is => 'rw', isa => 'Str', default => 'taro' );
has birth_date => ( is => 'rw', isa => 'Time::Piece', default => sub { Time::Piece->localtime() } );
has name => ( is => 'rw', isa => 'Str', lazy => 1, builder => 'build_name' );
sub build_name {
my $self = shift;
return $self->sei . ' ' . $self->mei;
}
__PACKAGE__->meta->make_immutable();
package main;
my $user = User->new();
say $user->name;
say $user->birth_date->ymd;
説明
- default でデフォルト値を設定する。値もしくはコードリファレンスを設定出来る。
- default の代わりに、lazy と builder を設定すると、そのアトリビュートが実際に使用されるまで、デフォルト値の設定を遅らせる事が出来る。
- ここでは name はインスタンス生成時では設定されず、say $user->name の際に、build_name() が実行される。
- lazy/builder を設定する代わりに、以下のように lazy_build => 1 のように設定しても良い。その場合、builderの関数名は _build_name に固定される。