¿Por qué mi proceso padre no ve la salida del niño hasta que sale?

Considere el siguiente script:

use IO::File;
$| = 1;
my ($handle, $pid) = myPipe();
if ($pid == 0) {
  print "$";
  sleep 5;
  exit;
}

print "child: ".<$handle>."\n";

sub myPipe {
  my $handle = new IO::File();
  my $pid = open($handle, "-|");
  return ($handle, $pid);
}

En este caso, el mensaje "hijo:" no aparece durante 5 segundos después de que comienza el proceso. Si elimino la llamada de suspensión del niño bifurcado, se imprime inmediatamente. ¿Por qué el niño bifurcado tiene que salir para que la tubería llegue al padre?

Respuestas a la pregunta(3)

Su respuesta a la pregunta