Jen Spinney wrote:
> Hello all!
Hello,
> print "\nSecond Trial:\n\n";
>
> if (open(CHILD, "|-"))
> {
> print "parent starts: ", (scalar localtime),"\n";
> print CHILD "printing to child\n";
> sleep 5;
> print "parent ends: ", (scalar localtime),"\n";
> }
> else
> {
> my $time = scalar localtime;
> my $input = <STDIN>;
> print "child starts: $time\n";
> exit;
> }
> __END__
>
> My output looks like this:
> First Trial:
>
> parent starts: Wed Nov 8 13:45:14 2006
> child starts: Wed Nov 8 13:45:14 2006
> parent ends: Wed Nov 8 13:45:19 2006
>
> Second Trial:
>
> parent starts: Wed Nov 8 13:45:19 2006
^^^^^^^^
> parent ends: Wed Nov 8 13:45:24 2006
> child starts: Wed Nov 8 13:45:19 2006
^^^^^^^^
> I expected the first trial print statements to execute in the same
> order as the second trial print statements, but the child print
> statements don't do execute until after the parent process is over.
Order of execution is determined by the OS, not by your program.
> It seems that the line (in the child process, second trial)
> my $input = <STDIN>;
> is blocking, but why?
Look carefully at the times displayed, it is not blocking.
John
--
Perl isn't a toolbox, but a small machine shop where you can special-order
certain sorts of tools at low cost and in short order. -- Larry Wall
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>