Ok now I'm really boggled...
If I use:
my $vars = { config => &cfg() };
instead of:
my $vars = { config => &cfg };
Then it works! So what's the difference between &cfg and &cfg() when it
comes to mod_perl, or at least ModPerl::Registry?
Thank-you all...
Tosh
Tosh Cooey wrote:
True, good point. I cleaned up my code and changed some things around
and I still have the same problem:
index.pl
########
use MyConfig;
use ClientConf;
use MyUser;
my $vars = { config => &cfg };
MyConfig.pm
###########
package MyConfig;
use strict;
use Exporter;
use vars qw(@ISA @EXPORT);
@ISA = qw(Exporter);
@EXPORT = qw(&cfg &user);
my %CFG = { global vars... };
sub cfg {
return ClientConf->new();
}
sub user {
return MyUser->new();
}
1;
The function "user" works just fine, it returns the object as expected.
#### BREAK ####
So, while I was testing to make sure everything works exactly as I
described above I discovered unexpected behaviour. &cfg is actually:
sub cfg {
my ($cfg_var) = @_;
if ($cfg_var) {
...do something...
} else {
return ClientConf->new();
}
}
&user is exactly as noted above. When I changed &user and added the
same $cfg_var and conditional it also did not return what I expected.
So basically the problem I'm having is that even though I'm calling &cfg
without arguments that $cfg_var is evaluating as "TRUE", but only under
ModPerl::Registry and not under regular unadulterated PERL.
As a PERL user for 15 years am I just the biggest newbie ever, or is
there something obscure going on that I should know about?
Thanks for anything!
Tosh
Ihnen, David wrote:
Global? There's no need to use a global here. You only ever
reference %CFG *in* the package... so just make it package scoped -
it'll act like a static variable and persist. (scope it with 'my' and
remove it from the export)
You can always get the value you want with a call to MyConfig::cfg
David
-----Original Message-----
From: Tosh Cooey [mailto:t...@1200group.com] Sent: Thursday, January
14, 2010 10:45 AM
To: modperl@perl.apache.org
Subject: A ghost in the machine?
Hi to everyone!
I'm trying to find out if I'm passing objects properly under mod_perl
because something is not working as I expect.
index.pl
########
use MyConfig;
my $vars = { config => &cfg };
MyConfig.pm
###########
package MyConfig;
use strict;
use Exporter;
use vars qw(@ISA @EXPORT %CFG );
use ClientConf;
@ISA = qw(Exporter);
@EXPORT = qw(%CFG &cfg);
%CFG = { global vars... };
sub cfg {
my $CFG{$clientID} = new ClientConf;
return $CFG{$clientID};
}
1;
Under normal PERL $vars->{config} is a MyConfig object. Under
mod_perl nothing is returned. Debugging with "print" statements in
&cfg shows me that "ref $CFG{$clientID}" is ClientConf, the object is
there, but upon return it just disappears.
I have other functions which "return new MyUser()" and these work
perfectly, so I'm thinking that the problem lies with the global
variable "$CFG" and that something which I think should be happening
is NOT happening.
I'm flummoxed...
Thank-you for any insights!
Tosh
--
McIntosh Cooey - Twelve Hundred Group LLC - http://www.1200group.com/