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