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
In reply to Re^3: Does there exist a CPAN module for lazily initialized variables?
by dragonchild
in thread Does there exist a CPAN module for lazily initialized variables?
by jryan
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |