They are initialized in my handler method, at the start of the request so
they should be initialized at runtime. Basically, I have a singleton object
which extends Class::Singleton which functions as an IOC container.
However, because I have multiple virtual hosts and because the database
connection is inside the IOC container, I have to have a separate object
graph for each virtual host to prevent them from inadvertently talking to
each other's databases. When I get an instance of the IOC container, I pass
it the name of the site. Internally, it then maintains 2 lexically scoped
variables; A hash, keyed by the name of the virtual host, and a scalar for
storing the name of the current virtual host so that subsequent calls to
the IOC container to get references to objects don't require a site name.
This initialization happens at the start of every request to ensure that
the right object graph is referenced when executing the request. However,
in some older sections of the code base, when I attempt to references the
IOC container these 2 lexically scoped variables are somehow empty, even
though they were initialized at the start of the request, and then I get an
error for attempting to call a function on an undefined value.

I know that the code for some older areas of the application are loaded
dynamically through evals and requires. Is it possible for that kind of
dynamic loading to result in multiple lexical scopes for the same package?

On Fri, Mar 25, 2016 at 3:58 PM, Perrin Harkins <phark...@gmail.com> wrote:

> On Fri, Mar 25, 2016 at 10:11 AM, John Dunlap <j...@lariat.co> wrote:
>>
>> Basically, I have a module which has a some lexically scoped variables in
>> it. These variables are used by accessor methods in the package. The
>> problem is that, if I use this module in certain parts of my application,
>> these variables are mysteriously empty even though I am certain that I've
>> already initialized them.
>>
>
> How do you initialize them? In code that runs at compile-time in the same
> module? In calls from httpd.conf or startup.pl? Is this an OO module with
> a declared package name?
>
>
>> Is there a way for a single perl interpreter to have multiple copies of a
>> lexical variable?
>>
>
> No, but keep in mind that mod_perl is running inside multiple httpd
> processes and each one has a separate interpreter with unique copies of all
> lexicals.
>
> - Perrin
>
>


-- 
John Dunlap
*CTO | Lariat *

*Direct:*
*j...@lariat.co <j...@lariat.co>*

*Customer Service:*
877.268.6667
supp...@lariat.co

Reply via email to