sub load { my $self = shift; return unless $self->{_loaded}; # load lazy object $self->{_loaded}=1; }; #### package Weapon; use base qw(LazyObject); # add ammunition to weapon sub load { my ($self, $ammo); $self->{_loaded} = $ammo; }; sub can_fire { $self->{_loaded} && $self->{_working}; };