sub build_lazy
{
my ($var, $callback, @params) = @_;
eval <<__EVAL__;
{
my \$$var;
sub $var {
\\\$var = $callback->(@params) unless defined \$$var;
\$$var;
};
}
__EVAL__
}
# Later ...
build_lazy( 'dbh', \&build_dbh, @dbh_params );
build_lazy( 'foo', \&build_foo );
Of course, you might want some dwimmery for hashes vs. arrays vs. scalars, unless you're ok with everything as a reference. I would be, but that's just me. And, you might want to throw BEGIN or CHECK around the calls to build_lazy(), but that's probably overkill.
------
We are the carpenters and bricklayers of the Information Age.
Then there are Damian modules.... *sigh* ... that's not about being less-lazy -- that's about being on some really good drugs -- you know, there is no spoon. - flyingmoose
I shouldn't have to say this, but any code, unless otherwise stated, is untested