From: Brian Candler Date: 2004-10-26T22:14:30+09:00 Subject: Re: [ANN] Apache::DBI 0.0.20041025b > [foo.rbx] > require 'dbi' > $dbh ||= DBI.connect('dbi:Pg:foo',...) > > [bar.rbx] > require 'dbi' > $dbh ||= DBI.connect('dbi:Pg:bar',...) > > $dbh conflicts. This is not cool way. Well OK, but if you can't choose a unique global variable name, you could instead write module ::MyPrivateStuff def self.dbh @dbh ||= DBI.connect('dbi:Pg:foo',...) end end dbh = ::MyPrivateStuff.dbh > Apache::DBI's advantage is transparent & simple. I'm guessing now. Does your module keep a separate database instance for each unique value of the DBI string? Or each unique combination of all the arguments inside DBI.connect(...) ? In other words, does it do something like $dbh ||= {} $dbh['dbi:Pg:bar'] ||= DBI.connect('dbi:Pg:bar') Help me out here :-) I'm just trying to understand what it's doing, so I can see whether I can make use of it. If my guess is correct, then perhaps the pattern can be abstracted: e.g. dbh = Persistent[DBI, :connect, 'dbi:Pg:bar', ...] and the implementation would be: module Persistent @things = {} def self.[](*args) @things[args] ||= args[0].send(*args[1..-1]) end end Regards, Brian.