Lazy defaults

sub init_foo { warn 'creating foo!'; 42 }

package A;
has 'foo' => (
    is      => 'ro',
    default => \&init_foo,
);

package B;
has 'foo' => (
    is      => 'ro',
    default => \&init_foo,
    lazy    => 1,
);

my $a = A->new; # 'creating foo!'
$a->foo; # 42

my $b = B->new; # nothing
$b->foo; # 'creating foo!'
$b->foo; # lazy value is cached