Hi John, Pretty hard to know what's going on without looking at actual code, but it could be some variation of this type of problem: http://perl.apache.org/docs/1.0/guide/porting.html#Name_collisions_with_Modules_and_libs
You can easily run into trouble with code that either doesn't use package names or exports things from use() calls. > Is it possible for that kind of dynamic loading to result in multiple lexical scopes for the same package? No, Perl doesn't support that. - Perrin On Fri, Mar 25, 2016 at 4:23 PM, John Dunlap <j...@lariat.co> wrote: > 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 >