Основная ошибка - использование 0 в качестве таймаута. Есть разница между нулем и undef.
Учитывая что изначальный вопрос упоминал форки, даю пример для родителя и одного потомка#!/usr/bin/perl -w
use IO::Handle;
use IO::Select;
pipe(READ, WRITE) or die $!;
WRITE->autoflush(1);
if (my $pid = fork) {
close WRITE;
my $s=IO::Select->new;
$s->add(\*READ);
while (1) {
if ($s->can_read(0.5)) {
my $line = <READ>;
print "Child sent:$line";
close READ;
waitpid($pid,0);
last;
} else {
print "doing something\n";
}
}
} else {
die "cannot fork: $!" unless defined $pid;
sleep (5);
print WRITE "Hello\n";
close WRITE;
exit;
}
Успехов