stas 02/04/14 23:56:39 Modified: src/docs/1.0/guide Changes.pod porting.pod Log: add a new section presenting a hackish solution for libraries collision, via do() or %INC mangling. Revision Changes Path 1.9 +5 -0 modperl-docs/src/docs/1.0/guide/Changes.pod Index: Changes.pod =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/Changes.pod,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- Changes.pod 13 Apr 2002 18:45:59 -0000 1.8 +++ Changes.pod 15 Apr 2002 06:56:39 -0000 1.9 @@ -11,6 +11,11 @@ =head1 ??? ver 1.32 +* guide::porting + + o add a new section presenting a hackish solution for libraries + collision, via do() or %INC mangling. + * guide::troubleshooting o solution to the 'readdir()/opendir() not working' problem (Louis 1.6 +52 -0 modperl-docs/src/docs/1.0/guide/porting.pod Index: porting.pod =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/porting.pod,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- porting.pod 4 Apr 2002 02:24:28 -0000 1.5 +++ porting.pod 15 Apr 2002 06:56:39 -0000 1.6 @@ -1855,6 +1855,58 @@ module names in package declarations, as explained above, you cover the first two as well. +=item A Hack + +The following solution should be used only as a short term +bandaid. You can force reloading of the modules by either fiddling +with C<%INC> or replacing use() and require() calls with do(). + +If you delete the module entry from the C<%INC> hash, before calling +require() or use() the module will be loaded and compiled again. For +example: + + ./project/runA.pl + ----------------- + BEGIN { + delete $INC{"MyConfig.pm"}; + } + use lib qw(.); + use MyConfig; + print "Content-type: text/plain\n\n"; + print "Script A\n"; + print "Inside project: ", project_name(); + +Apply the same fix to I<runB.pl>. + +Another alternative is to force module reload via do(): + + ./project/runA.pl + ----------------- + use lib qw(.); + do "MyConfig.pm"; + print "Content-type: text/plain\n\n"; + print "Script B\n"; + print "Inside project: ", project_name(); + +Apply the same fix to I<runB.pl>. + +If you needed to import() something from the loaded module, call the +import() method explicitly. For example if you had: + + use MyConfig qw(foo bar); + +now the code will look as: + + do "MyConfig.pm"; + MyConfig->import(qw(foo bar)); + +Both presented solutions are ineffective, since the modules in +question will be reloaded on each request, slowing down the response +times. Therefore use these only when a very quick fix is needed and +provide one of the more robust solutions discussed in the previous +sections. + + =back See also the C<perlmodlib> and C<perlmod> manpages.
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]