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/