I'm not really sure what's going on...

I tried making a test module to see what was going on inside, which appeared
to function correctly.  However, the "real" module is still having troubles.
The database handle is opened ($dbh=DBI->connect...) in a BEGIN block in the
"real" module, but the connections don't seem to work when the server
originally loads, until I make a change in the file and Apache::Reload
reloads it (after which it works fine as long as the server's alive).

Here's the module and test results :

package MyTest;

use strict;
use warnings;
use Apache2;
use Apache::Const qw(-compile OK);
use carp qw(cluck);
#use vars qw($VAR);
our $VAR;
BEGIN {
    warn ("Calling BEGIN block");
    warn ("BEGIN: VAR is $VAR");
    $VAR="HELLO";
    warn ("BEGIN: CHANGED VAR to $VAR");
}

warn ("Interpreting module");
warn ("VAR is $VAR");

sub handler {
    my $r=shift;
    $r->content_type('text/plain');
    $r->print("VAR is $VAR");
    return Apache::OK;
}

END {
    warn ("Calling END block");
    warn ("VAR is $VAR");
}

1;

(httpd.conf)
PerlModule MyTest;
<Location /TEST>
  SetHandler perl-script
  PerlResponseHandler MyTest
</Location>

(error_log)
[Thu Jul 24 11:42:01 2003] [notice] Parent: Created child process 2896
calling begin at f:/you/web//YOU/Objects.pm line 17.
Calling BEGIN block at f:/you/web//MyTest.pm line 11.
Use of uninitialized value in concatenation (.) or string at
f:/you/web//MyTest.pm line 12.
BEGIN: VAR is  at f:/you/web//MyTest.pm line 12.
BEGIN: CHANGED VAR to HELLO at f:/you/web//MyTest.pm line 14.
Interpreting module at f:/you/web//MyTest.pm line 17.
VAR is HELLO at f:/you/web//MyTest.pm line 18.
[Thu Jul 24 11:42:07 2003] [notice] Child 2896: Child process is running
[Thu Jul 24 11:42:07 2003] [notice] Child 2896: Acquired the start mutex.
[Thu Jul 24 11:42:07 2003] [notice] Child 2896: Starting 250 worker threads.

(the you/objects.pm is the "real" module giving me trouble)

(output of http://localhost/TEST)
VAR is HELLOHere's the relevant parts (I hope) of my code (full code
available if needed):package YOU::ApacheApp;...use warnings;use CGI;use
DBI;...use YOU::Objects;...    my $event=YOU::Event->new($i); #Should
connect to DB using $dbh......    unless ($event->valid) {print "ERROR
ACCESSING DB! $DB::Objects::VERSION
${YOU::ApacheApp::VERSION}/${YOU::Objects::VERSION}<BR />"; my
$dump=Dumper($event);$dump=~s/ /\&nbsp;/mg;$dump=~s/\n/\<BR \/\>/mg;print
$dump}# $event->valid returns true if connected to DB(Objects.pm)package
YOU::Objects;use strict;use warnings;use DBI;use DB::Objects;use vars
qw($VERSION);our $dbh;BEGIN {    $VERSION=0.01;    my
$mysqldsn="DBI:mysql:database=...;host=...;mysql_compression=1";
$dbh=DBI->connect($mysqldsn,"...","...") or die "couldn't connect:
".DBI->errstr;}END {    $dbh->disconnect();}...In this example, I get the
error message until Apache::Reload reloads the module, after which it works
fine.Any insight would be appreciated.  Issac----- Original Message ----- 
From: "Stas Bekman" <[EMAIL PROTECTED]>
To: "Issac Goldstand" <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>
Sent: Sunday, July 20, 2003 10:21 PM
Subject: Re: [mp2] BEGIN blocks


> Issac Goldstand wrote:
> > I seem to be having some trouble that I think may be associated with
BEGIN
> > blocks.  To make sure I'm not jumping at shadows, could someone tell me
what
> > the expected behavior of BEGIN blocks in use()d modules is?  How many
times
> > are they called (during server startup and/or restarts of any type) and
> > when?
>
> This is not documented yet for 2.0. I think it should be similar to 1.0.
BEGIN
> blocks are called when the module is loaded. What unusual behavior do you
see?
>
>
> __________________________________________________________________
> Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
> http://stason.org/     mod_perl Guide ---> http://perl.apache.org
> mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
> http://modperlbook.org http://apache.org   http://ticketmaster.com
>


Reply via email to