It works sometimes.
As I do an fdopen, I think it should work each time. Infact: I'm just running below code and it's giving me the expected result now the 20th time.
Here is the (slightly modified) code, which I think should work.
use IO::Handle;
use strict;
use warnings;
my $pos= tell *DATA;
my $pid= fork();
die unless defined $pid;
if ($pid == 0) {
my $x= IO::Handle->new();
$x->fdopen(fileno(DATA), "r");
seek $x, $pos, 0;
print "Start c\n";
sleep 4;
while (<$x>) {
print "c: $_"; sleep 1;
}
print "stop c\n";
}
else {
my $y= IO::Handle->new();
$y->fdopen(fileno(DATA), "r");
seek $y, $pos, 0;
print "Start p\n";
while (<$y>) {
print "p: $_"; sleep 1;
}
print "waiting for child\n";
wait;
print "stop p\n";
}
__DATA__
a
b
c
d
e
s$$([},&%#}/&/]+}%&{})*;#$&&s&&$^X.($'^"%]=\&(|?*{%
+.+=%;.#_}\&"^"-+%*).}%:##%}={~=~:.")&e&&s""`$''`"e
|