Я понимаю, что использование builder позволяет подклассам легко переопределять атрибуты по умолчанию, а роли могут require их. Это также можно выполнить с помощью default следующим образом:
has 'foo' =>
is => 'rw',
isa => 'Str',
default => sub { $_[0]->_build_foo };
Мне интересно, есть ли дополнительные преимущества для использования builder, о которых я не знаю? Я сам придумал:
-
builderявляется декларативным, поэтому вы можете понять, чтоfooсоздается_build_foo -
builderисключает оболочку подпрограммы, что делает ее немного быстрее -
builderпозволяет использовать полезныйlazy_build.
UPDATE. Чтобы прояснить это, речь идет не о default vs builder вообще, а default => sub { $_[0]->_build_foo } vs builder => '_build_foo'.