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/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.