in reply to Creating new database handles with mod_perl

First read and understand CGI to mod_perl Porting. mod_perl Coding guidelines, Lexical scoping like a fox, Variable Scoping in Perl: the basics

Then read Apache::DBI and then view the source for Apache::DBI

Then see Apache::Status and/or turn on http://search.cpan.org/perldoc/DBI#trace and examine the logs

Also, try this

$ perl -le " for(1..3){my@f; print\@f }" ARRAY(0x99a934) ARRAY(0x99a934) ARRAY(0x99a934) $ perl -le " for(1..3){my@f; print\@f; push @global, \@f }" ARRAY(0x99a954) ARRAY(0x3f8cdc) ARRAY(0x3f8d4c)

That ought to clarify for you what is going on :)

Replies are listed 'Best First'.
Re^2: Creating new database handles with mod_perl
by Anonymous Monk on May 20, 2012 at 04:06 UTC
      Great policy. I added the cross post from SO back to here as well
Re^2: Creating new database handles with mod_perl
by lschult2 (Novice) on May 20, 2012 at 14:34 UTC

    I've read each of those cover to cover many times. I'm a long time Perl user: not quite a Monk but getting there.

    The one thing I am missing conceptually is how to verify that 2 child processes indeed have a different connection. Both $dbh have the same memory address, but does that mean a shared connection? Maybe, maybe not, since the addresses are virtual.

    I've been using Apache2::Status heavily, and documentation states that there is a section on handles, but it's not showing up for me and I haven't debugged why yet. If that would answer whether handles shared or not, maybe I should focus on debugging why the handles are not showing up in Apache2::Status.

      I've read each of those cover to cover many times. I'm a long time Perl user: not quite a Monk but getting there.

      :D Just covering my bases :)

      The one thing I am missing conceptually is how to verify that 2 child processes indeed have a different connection. Both $dbh have the same memory address, but does that mean a shared connection? Maybe, maybe not, since the addresses are virtual.

      My ideas for verification were checking the logs, or database server status. Are you sure you're not watching the same child? Are you checking the pid $$? $Apache::DBI::DEBUG=2 enables debugging output with pids :)

      Same memory address does not mean shared connection, each process gets a "distinct memory-space", but I would be surprised if both children would happen to have the same address. I suppose it might happen theoretically, but I doubt it :)

      maybe I should focus on debugging why the handles are not showing up in Apache2::Status.

      I don't see mention of handles in Apache2::Status docs, what handles are you talking about?