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]> |
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:[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/