in reply to Re^4: Does there exist a CPAN module for lazily initialized variables?
in thread Does there exist a CPAN module for lazily initialized variables?

No, the difference here is that you make this call $dbh->connect_cached() so that instead of just storing your object - you revivify it automatically as needed. I think of this as important for something that will be long running - I'd just go with a plain stored value otherwise.

sub main::dbh { # for daemons and long running code - reconnect as needed DBI->connect_cached( ... ) } sub main::dbh { # initialize the connection or re-use. $::DBH ||= DBI->connect( ... ) }
  • Comment on Re^5: Does there exist a CPAN module for lazily initialized variables?
  • Download Code

Replies are listed 'Best First'.
Re^6: Does there exist a CPAN module for lazily initialized variables?
by jryan (Vicar) on Jul 14, 2004 at 20:45 UTC

    Wouldn't that be something to change in the callback sub that you'd pass to the tie call?

      Sure you could, but I wouldn't bother tying it at this point. You have to have one globally accessible symbol by which to reach this connection. Either it happens explicitly through &::dbh() or implicitly through tied $::dbh. I'd generally prefer to leave off with the tying to avoid excessive cuteness.

        *shrug*. I don't think the purpose of the tie here is cuteness, but to actually separate the initialization details from the code. (Also, I'm not using globals, but package-scoped lexicals declared with my). I guess I could write a module that supported either interface (tied or functional). Hell, most of the code for both cases is already written in this very thread!