Por que meu processo pai não vê a saída da criança até que ela saia?

Considere o seguinte 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);
}

Nesse caso, a mensagem "filho:" não aparece por 5 segundos após o início do processo. Se eu remover a chamada de suspensão da criança bifurcada, ela será impressa imediatamente. Por que a criança bifurcada precisa sair para o tubo descarregar para o pai?

questionAnswers(3)

yourAnswerToTheQuestion