¿Cómo puedo leer la salida de comandos externos en tiempo real en Perl?

Tengo algunos scripts de bash que ejecuto, pero pueden demorar varias horas en completarse, durante los cuales escupen velocidades de descarga, ETA e información similar. Necesito capturar esta información en perl, pero tengo un problema, no puedo leer la línea de salida por línea (a menos que me esté perdiendo algo).

¿Alguna ayuda para resolver esto?

EDITAR: para explicar esto un poco mejor, estoy ejecutando varios scripts de bash uno junto al otro, deseo usar gtk con perl para producir barras de progreso útiles. Actualmente estoy ejecutando 2 subprocesos por cada script de bash que deseo ejecutar, un subproceso principal para actualizar la información gráfica. Se ve algo como esto (reduce tanto como pueda):

  my $command1 = threads->create(\&runCmd, './bash1', \@out1);
  my $controll1 = threads->create(\&monitor, $command1, \@out1);
  my $command1 = threads->create(\&runCmd, 'bash2', \@out2);
  my $controll2 = threads->create(\&monitor, $command2, \@out2);

  sub runCmd{
     my $cmd = shift;
     my @bso = shift;
     @bso = `$cmd`
  }
  sub monitor{
     my $thrd = shift;
     my @bso = shift;
     my $line;
     while($thrd->is_running()){
       while($line = shift(@bso)){
         ## I check the line and do things with it here
       }
       ## update anything the script doesn't tell me here.
       sleep 1;# don't cripple the system polling data.
     }
     ## thread quit, so we remove the status bar and check if another script is in the queue, I'm omitting this here.
  }

Respuestas a la pregunta(7)

Su respuesta a la pregunta