Moose :: Manual :: Attributes состояния:
В качестве альтернативы использованию ссылки на подпрограмму [по умолчанию] вы можете вместо этого предоставить метод построителя для вашего атрибута:
...
Это имеет несколько преимуществ. Во-первых, он перемещает фрагмент кода в свой собственный именованный метод, что улучшает удобочитаемость и организацию кода.
Итак, ваш атрибут может определить значение по умолчанию таким образом:
has attr => (
is => 'ro',
builder => 'subroutine'
);
sub subroutine {
# figure out and return default value
}
Я не понимаю, почему это должно быть отдельно от значения по умолчанию. Не могли бы вы просто передать ссылку на именованную подпрограмму?
has attr => (
is => 'ro',
default => \&subroutine
);
И разве это не будет лучшей практикой программирования, поскольку вы гарантированно не будете случайно ссылаться на подпрограмму, которая не существует? Вы будете ссылаться на метод с логической ссылкой вместо символической ссылки.