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?

--
David Serrano


In reply to Sharing DBI handler between several modules by Hue-Bond

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.