Consider this litte program:
#!/usr/bin/perl
use strict;
use warnings;
our $foo;
sub do_something {
$foo++;
print "$foo\n";
}
our $running;
if (!$running) {
$foo = 0;
$running = 1;
$SIG{INT} = sub {do $0};
for (;;) {
sleep (1);
do_something();
}
}
This will output increasing numbers.
Now change its source code while it is running, for instance change "
$foo++" to "
$foo+=5". Then send the program a SIGINT by pressing ^C (don't know if this works on Windows). You will get a warning about a redefined subroutine, but then the program continues running with its old variables and a new do_something subroutine.
I experienced that this is particularly useful for programs like IRC bots to change the code without having to stop the programs.
If you put the subroutine into a module, you will probably be able to leave out the
$running stuff and make everything simpler.