in reply to DBI handle destroyed during CGI::Application setup

<warning msg="hack alert">

Don't do this - follow rob_au's advice at Re: DBI handle destroyed during CGI::Application setup instead.

I should be flogged for giving advice like this. I'd vote to reap it, but that fact that it works blanketed by TIMTOWDTI (at least in the current version ....) makes it worth keeping methinks. But it is buggy at best, because the setup method will get called twice, once with an undefined argument (when new() is called). bad jeffa!

</warning>

How about:
my $DBH = DBI->connect( ...); # call setup method ... foo->setup($DBH); $DBH->disconnect(); # and for the setup method: sub setup { my ($self,$DBH) = #_; ... $self->param ( 'mydbh' => $DBH ); }
The DBI object IS going out of scope in your code, and because you are not keeping a reference to it yourself, the bad thing happens. ;)

jeffa

L-LL-L--L-LL-L--L-LL-L--
-R--R-RR-R--R-RR-R--R-RR
F--F--F--F--F--F--F--F--
(the triplet paradiddle)

Replies are listed 'Best First'.
Re: (jeffa) Re: DBI handle destroyed during CGI::Application setup
by rob_au (Abbot) on Jan 07, 2002 at 04:31 UTC
    While this certainly works, the problem which talexb is experiencing is not related to scope of the DBI handle within the setup method of the CGI::Application class, but rather failure to explicitly disconnect the handle prior to application termination.

    The incorporation of the DBI external to the CGI::Application class, while increasing the variable's scope and solving the immediate problem, to a certain extent invalidates the usefulness of the param methods and the specific scope that they offer.

    Just my random thoughts on the subject.

     

    perl -e 's&&rob@cowsnet.com.au&&&split/[@.]/&&s&.com.&_&&&print'

Re: (jeffa) Re: DBI handle destroyed during CGI::Application setup
by talexb (Chancellor) on Jan 07, 2002 at 04:19 UTC
    Awesome. And, now I think about it, a straightforward solution. I was just way too frazzled to see it. Yeah, I like it.

    A million thanks. Thank you. Thank you. Thank you.

    --t. alex

    "Excellent. Release the hounds." -- Monty Burns.

    <Update (19:54 local time)> I tried it a little differently than what you suggested. Check out my Scratch Pad for more information. </Update>