in reply to A cacheing tied hash base class

Very cool! But you can save the double lookup easily:
sub FETCH { my($self, $key) = @_; unless (exists $self->{$key}) { if (my $meth = $self->can($key)) { $self->{$key} = $meth->($self); } else { warn "No method for '$key'"; $self->{$key} = undef; } } return $self->{$key}; }
That's because $obj->can('meth') returns the coderef to execute!

-- Randal L. Schwartz, Perl hacker