sub FETCH { my ($this, $key) = @_; return $this->{l}{$key} if exists $this->{l}{$key}; # I don't know what you're doing, but eval is scary :) # Consider using a sub ref (sub { ... } or \&subname) instead $this->{l}{$key} = eval $this{f}{$key}; # Create a new hash ref if the eval returned undef $this->{l}{$key} = { } if not defined $this->{l}{$key}; return $this->{l}{$key}; }