perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tosh Cooey <t...@1200group.com>
Subject Re: A ghost in the machine?
Date Thu, 14 Jan 2010 20:51:26 GMT
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:tosh@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/

Mime
View raw message