Использование 'builder' и 'default' соответствующим образом может облегчить чтение и организацию вашего кода.
'builder' также может соответствовать привычному шаблону программирования, когда частные методы начинаются с подчеркивания.
has json => ( is => 'ro', default => sub { JSON->new } )
has schema => ( is => 'ro', builder => '_schema' }
sub _schema {
my $self = shift;
$self->log_debug('constructing schema') if($self->debug);
My::App::Schema->connect($self->dsn,$self->username,$self->password)
}
Кроме того, использование компоновщика позволяет превратить дорогие функции в запомненные средства доступа, не затрагивая оригинальный метод:
sub get_things {
my $self = shift;
return +{ map { $_ => $self->price_for($_) }
$self->wodgets->calulate_expensive_things };
Рефакторинг с памяткой:
has things => ( is => 'ro', lazy => 1, builder => 'get_things' );
Это большинство способов, которыми я использовал builder для уточнения своего кода.