lazy_build is just syntactic sugar:

has model => ( is => 'rw', isa => 'Str', lazy_build => 1, );

is identical to:

has model => ( is => 'rw', isa => 'Str', required => 1, lazy => 1, bulider => '_build_model', predicate => 'has_model', clearer => 'clear_model', );