again - mechanism for manually reloading modules when they've changed
use again 'LWP::Simple'; # default import use again 'LWP::Simple', []; # no import use again 'LWP::Simple', [qw(get)]; # import only get use again 'LWP::Simple', (); # default import (!!) use again 'LWP::Simple', qw(get); # import only get use again; require_again 'Foo::Bar';
This module provides a mechanism for manually reloading a module if its file has changed since it was first / previously loaded. This can be useful for long-running applications, where new versions of modules might be installed while the application is still running.
use again;
A bare use again;, with no import list, will export require_again into your package. For historical reasons it will also export use_again, which you shouldn't use (it will croak anyway).
require_again
use_again
use again MODULE, [ IMPORTS ];
If you do pass arguments, the first is used with require_again, and all remaining arguments are used to import symbols into your namespace.
When given arguments, use again does not export its own functions.
use again
A single array reference is flattened. If that arrayref contains no elements, the import does not take place.
In mod_perl scripts, this of course only happens when your script is evaled. This happens when your Apache::Registry or Apache::PerlRun script changes, or when your PLP script is requested.
eval
require_again MODULE;
This is the driving force behind again.pm. It requires your module if it has not been loaded with require_again before or it has changed since the last time require_again loaded it.
again.pm
require
If you're imported a function from the module, then you'll need to re-import it after calling require_again:
use again 'Module::Path', qw(module_path); ... do some stuff ... require_again('Module::Path'); Module::Path->import('module_path');
If you don't do this then you'll end up running the version of the function that you first loaded.
Module::Reload provides a class method which checks all loaded modules to see if the file on disk has changed since the module was loaded.
Class::Unload unloads a class, by clearing out its symbol table and removing it from %INC.
%INC
Padre::Unload is part of the Padre IDE. It's similar to Class::Unload, but says it has "a few more tricks up its sleeve". It's not documented though, so just intended for internal use in Padre.
https://github.com/neilbowers/again
There is no license. This software was released into the public domain. Do with it what you want, but on your own risk. The author disclaims any responsibility.
If you want to (re)distribute this module and need a license, you can redistribute it and/or modify it under the same terms as Perl itself.
Juerd Waalboer <juerd@cpan.org> <http://juerd.nl/>
Documentation updates from Neil Bowers.
To install again, copy and paste the appropriate command in to your terminal.
cpanm
cpanm again
CPAN shell
perl -MCPAN -e shell install again
For more information on module installation, please visit the detailed CPAN module installation guide.