Lazy is very powerful

package Distribution;
has 'filename';
has 'destination'; 
# lazily extracts filename to a temp dir, and returns that

has 'md5';
# lazily calculates the md5sum 

has 'manifest';
# looks in $self->destination for MANIFEST and returns parsed copy

Predicates

has 'foo' => (
    is        => 'ro',
    required  => 0,
    predicate => 'has_foo',
);

Class->new->has_foo;              # false
Class->new( foo => 42 )->has_foo; # true