On Sat, 26 Aug 2000, Philip Molter wrote:
> On Sat, Aug 26, 2000 at 05:22:27PM +0200, Stas Bekman wrote:
>
> : The following is a known kludge, but it doesn't seem to apply in your
> : case (I thought you might use it in PerlHandler)
> :
> : =head1 More package name related issues
> :
> : If you have the following:
> :
> : PerlHandler Apache::Work::Foo
> : PerlHandler Apache::Work::Foo::Bar
> :
> : And you make a request that pulls in C<Apache/Work/Foo/Bar.pm> first,
> : then the C<Apache::Work::Foo> package gets defined, so mod_perl does
> : not try to pull in C<Apache/Work/Foo.pm>
>
> Yes, I read that. I don't know if the issue is one in the same.
> Because they are in the same file, Object.pm is definitely being
> loaded first. However, what happens differently when a module is
> loaded at initial startup versus when the same module is loaded
> when a script runs?
Do you see the same behaviour if you split the two packages into two
different files?
> : > : > I have a module with some code like this:
> : > : >
> : > : > package Object;
> : > :
> : > : => use Object::SubObj;
> : > :
> : > : > sub new {
> : > : > my $class = shift;
> : > : > return bless {}, $class;
> : > : > }
> : > : >
> : > : > sub SubObj {
> : > : > Object::SubObj->new();
> : > : > }
> : > : >
> : > : > package Object::SubObj;
> : > : > sub new {
> : > : > my $class = shift;
> : > : > return bless {}, $class;
> : > : > }
> : > : >
> : > : > I have a script with code like this:
> : > : >
> : > : > $obj = Object->new();
> : > : > $sub = Object->SubObj();
> :
> : How about:
> :
> : $sub = Object::SubObj();
> :
> : Your sub 'SubObj' isn't a method, so you should call it as a function and
> : not a method.
>
> Well, except, in the effort to simplify all this, the $obj->SubObj()
> method doesn't just pass in nothing. It passes in various bits of
> information contained in the Object-class object. The sub SubObj
> is more like:
>
> sub SubObj {
> my ( $this ) = @_;
> Object::SubObj->new( $this->{'var1'}, $this->{'var2'} );
> }
>
> So it's actually tied pretty much to the POO interface. I mean,
> it's basically not /that/ big a deal, because by writing it:
>
> sub SubObj {
> my ( $this ) = @_;
> 'Object::SubObj'->new( $this->{'var1'}, $this->{'var2'} );
> }
>
> the whole problem is averted. I'm really just wondering what
> happens differently when the module is loaded from a startup.pl
> script via PerlRequire (the PerlHandler is Apache::Registry) versus
> when it's loaded as a result of a script call, because those
> differences may cause other problems in the future.
I'd try to run it under debugger and see where the problem occurs. If you
can send a *short* and *simple* example that one can reproduce the problem
with someone will test it.
_____________________________________________________________________
Stas Bekman JAm_pH -- Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide http://perl.apache.org/guide
mailto:[EMAIL PROTECTED] http://apachetoday.com http://jazzvalley.com
http://singlesheaven.com http://perlmonth.com perl.org apache.org