package Tie::LazyInitialized::Hash; use strict; require Tie::Hash; our @ISA = 'Tie::StdHash'; my $sub; sub TIEHASH { my ($class, $callback, @args) = @_; $sub = sub { $callback->(@args) }; bless {}, $class; } sub FETCH { my ($self, $key) = @_; %$self = %{ $sub->() } unless %$self; # hehe, i wonder if %&$sub would work? $self->{$key} } 1;