Parallel::ForkManager
permite el uso de llamadas diferidas
o callbacks.
Las callbaks se establecen mediante los métodos del objeto
Parallel::ForkManager
run_on_start, run_on_wait y run_on_finish.
Estas reciben como argumentos las referencias a las subrutinas que se ejecutarán en 
las correspondientes situaciones. 
Consulte el manual de Parallel::ForkManager.
Modifique el ejemplo en la sección anterior para que 
disponga de un hash con claves en los PID 
y cuyos valores sean un hash anónimo conteniendo la información
asociada al proceso: enlace a descargar, estatus de finalización 
y el PID. Para actualizar el hash use callbacks
en el arranque y en la finalización de cada proceso.
Añada al programa un parámetro $limite que controla el tiempo límite
de descarga. Si el tiempo es superado elimine los procesos
de descarga que no hayan terminado. Use para ello un callback
de espera (run_on_wait).
Un manejador instalado con run_on_start será ejecutado cada vez que se 
crea con éxito un nuevo proceso hijo. El manejador es llamado con 
dos argumentos:
start)
El formato de llamada de  run_on_wait
es run_on_wait($code, [$period]).
La rutina  referenciada por $code es llamada por el 
proceso padre cada vez que se crea un nuevo
hijo. Si se provee el segundo argumento $period
entonces la subrutina referenciada por $code es llamada 
periódicamente, aproximadamente cada $period segundos.
No se le pasan parámetros a $code.
El siguiente ejemplo muestra la instalación de manejadores
on_start y  on_wait.
$pm->run_on_start(
   sub {
      my ($pid, $link)=@_;
      $pid_table{$pid} = {link => $link, pid => $pid, exit => undef};
   }
);
$pm->run_on_wait(
   sub {
     print "Time: ".(time()-$start_time)."\n";
     for (keys %pid_table) {
       print "$_ => $pid_table{$_}->{link}\n";
     }
     print "\n";
   }, $period
);
El manejador instalado mediante run_on_wait
muestra el tiempo transcurrido
desde $start_time asi como el contenido 
del hash %pid_table:
Casiano Rodríguez León
