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