Re: A ghost in the machine?
Tosh Cooey <[email protected]>
| Newsgroups | gmane.comp.apache.mod-perl |
|---|---|
| Organization | Twelve Hundred Group LLC |
| Message-ID | <[email protected]> |
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:[email protected]]
> Sent: Thursday, January 14, 2010 10:45 AM
> To: [email protected]
> 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/