Ha ha! The ghost is me, I'm an archaic leftover! I did say I been in this for 15 years ;)

Well Gang, we solved the smaller @_ mystery but not the larger "different behaviour under mod_perl" mystery. I have my bets on it being Old Man Jenkins trying to scare everybody away by wearing a costume.

So?

Thanks Eric...

Tosh


Eric Howe wrote:
Hi Tosh,

The function sigil ("&") is an archaic left over from before perl5. Calling a function as "&cfg" is the 
same as saying "&cfg(@_)" and that implicit "@_" was probably the source of your problem. A bit more 
information can be found here:

http://www.perlfoundation.org/perl5/index.cgi?subroutines_called_with_the_ampersand

Executive summary: don't use "&" on a sub unless you need a sub-ref:

        my $x = \&cfg;
        $x->();


On 2010-01-14, at 13:28 , Tosh Cooey wrote:

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


Eric Howe
e...@pieinsky.ca



--
McIntosh Cooey - Twelve Hundred Group LLC - http://www.1200group.com/

Reply via email to