Perrin Harkins wrote: > valerian wrote: > >> So the weird thing is that it runs fine the first time, but when I >> reload the page, it doesn't show the variable I imported from >> My::Config > > > Try changing this: > > use My::Config; > > to this: > > require My::Config; > import My::Config; > > BEGIN blocks are only run once in PerlRun/Registry, and PerlRun clears > the current namespace after each request, erasing the aliases created by > import. > Of course I can't explain why this worked for Stas. Maybe there is > something about the specific versions of Perl/mod_perl that affects this.
I think I've had enough coffee. PerlRun recompiles the code on each request, meaning that it re-runs any BEGIN blocks on each request. Meaning that My::Config will re-import %CF afresh. It's simply to check, add to your script: BEGIN { warn "BEGIN was called\n"; } you will see the message on every reload. Since use is almost the same as: require+import. require won't be called because the module will be already in %INC, but import will be always called. Again it's simply to check. Add to My::Config: sub import { warn "import was called" } and don't inherit from Exporter. Again you will see import() called on each request. > In general, you'd be better off just avoiding aliases and > Exporter altogether, since they waste memory and can cause confusion. Seconded. See http://perl.apache.org/docs/general/perl_reference/perl_reference.html#Using_Global_Variables_and_Sharing_Them_Between_Modules_Packages __________________________________________________________________ Stas Bekman JAm_pH ------> Just Another mod_perl Hacker http://stason.org/ mod_perl Guide ---> http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com