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/

Reply via email to