use strict; sub build_lazy { my ($name, $callback, @params) = @_; my $var; no strict 'refs'; *$name = sub { $var = $callback->(@params) unless defined $var; $var; }; } build_lazy( 'dbh', sub { print @_ }, 'hi'); print dbh(), dbh(); # hi11