In a program I'm writing, I want to share the DBI database handler between several modules. That way, the functions in that modules could access the database directly. Is this the right approach? How could it be achieved?. I've thought of something like:
package Hue::SQL;
sub open { return DBI->connect blah blah; }
sub close { $main::dbh->disconnect; } ## <-- here is it: use
+ $main::dbh
package Hue::Foo;
sub do_something {
my $data = shift;
$main::dbh->do ("sql query using \$data"); ## <-- again
}
package main;
use Hue::SQL;
use Hue::Foo;
$dbh = Hue::SQL::open;
Hue::Foo::do_something ($data);
But this doesn't seem very clean to me. Another approach is to pass the $dbh as an argument to close(), do_something() and every function that needs it, but I'm not happy with that either. I thought about the possibility of all modules importing $dbh from main, like use does, so $Hue::SQL::dbh, $Hue::Foo::dbh and $main::dbh would be the same, using references or something. Is this feasible? Any other idea?