Почему мой родительский процесс не видит вывод дочернего процесса, пока он не завершится?

Рассмотрим следующий скрипт:

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);
}

В этом случае сообщение «child:» не появляется в течение 5 секунд после запуска процесса. Если я уберу вызов сна из разветвленного ребенка, то он сразу напечатает. Почему раздвоенный ребенок должен выйти за трубу, чтобы смыть к родителю?

Ответы на вопрос(3)

Ваш ответ на вопрос