++ed by:

2 PAUSE users
1 non-PAUSE user.

Christian Jaeger
and 1 contributors


Chj::ruse - reload modules


 use FP::Repl;
 use Foo;
 use Chj::ruse;
 use Bar qw(biz bim);
 # edit the Foo.pm or Bar.pm files, then (possibly from the repl):
 > ruse; # reloads all changed modules, and re-does all imports
         # which have happened for those modules since Chj::ruse has
         # been loaded.


Extended copy of Module::Reload which modifies Exporter.pm so that exports are tracked, so that these are redone as well.

One function is exported: ruse. It does the equivalent of Module::Reload->check, and re-exports stuff as far as possible.

The function takes an optional argument: a temporary new debug level, which shadows the default one stored in $Chj::ruse::DEBUG. 0 means no debugging info. -1 means be very silent (set $^W to false, to prevent redefinitions of subroutines *which are NOT in the namespace being reloaded* (subroutines in the namespace being reoaded are deleted first, so there is never given a warning in this 'normal' case)).


Each time import is called on a particular modules ("use Foo qw(biz baz)"), the previous import arguments from the previous call is forgotten. Thus if a module is use'd/import'ed multiple times in a row from the same source file, only part of the import list is remembered. Thus not everything is re-exported by ruse. (Can this be solved?)

Hm, if an error prevented a module from having been loaded, somehow reload doesn't (always?) work ? why?

This module might have problems with threads - I don't know if other threads might try to run subroutines which have been deleted before being defined again.