On Tue, 31 Jul 2001, Philip Mak wrote:

> On Tue, 31 Jul 2001, Kyle Oppenheim wrote:
>
> > Apache::Reload works by performing a stat on every file in %INC and calling
> > require for all the files that changed.  It's quite possible that some of
> > the files in %INC are using relative paths (often '.' is in @INC).  So, Perl
> > was able to load the file originally because the initial 'use' or 'require'
> > was after Apache changed to your directory.  However, when Apache::Reload
> > goes to look for the file, it can't find it because the current directory is
> > different (most likely the ServerRoot).
>
> I've ran into this problem with Apache::Reload a couple of times myself.
>
> Isn't there a way that Apache::Reload can be made to work transparently
> (in the spirit of making programs "Do The Right Thing (tm)")?  Perhaps by
> overloading the "use" and "require" functions to convert pathnames to be
> fully qualified before inserting them in %INC?

This is a good idea, though you cannot do that unless you are running
under 5.6 or some earlier Perl which supports the notion of GLOBAL::CORE::
namespace (which can be a bad thing to do anyway). Or write some XS code
:)

Extending your @INC is the simplest solution. The docs should be updated
and you will be all set.

> (I think this would also help with same-named mod_perl scripts from
> different VirtualHosts in the same instance of Apache interfering with
> each others' execution?)

Not really. You have 1:1 mapping in %INC. How exactly do you suggest it to
work?

It'll be all clean in mod_perl 2.0, where every vh will have its own pool
of interpreters if wanted, with a private copy of %INC.


_____________________________________________________________________
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://eXtropia.com/
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/


Reply via email to