If we subclass our Person
class, we can override the size
attribute's default:
package Lilliputian;
use Moose;
extends 'Person';
has +size => ( default => "small" );
For example, a role could provide an attribute but require that the consuming class provide the default
:
package HasSize;
use Moose::Role;
requires '_default_size';
has 'size' => (
is => 'ro',
lazy => 1,
default => sub { $self->_default_size }
);
package Lilliputian;
use Moose;
with 'HasSize';
sub _default_size { return "small" }
compare with Moose::Manual::Attributes#Builders-allow-subclassing