http://qs1969.pair.com?node_id=1140557


in reply to Re^3: Can't close pipe to invalid process
in thread Can't close pipe to invalid process

That's completely wrong.

1. Closing one end of a pipe doesn't cause close on the other end to return an error.

$ perl -E' pipe($r, $w) or die $!; close($w) or die $!; close($r) or die $!; say "ok"; ' ok

2. Closing a pipe created by open(my $fh, '|-', ...) reads the process (calls wait). It's very appropriate to do this, whether the pipe is closed or not. Closing such a handle returns the same thing as system.

$ perl -E' open(my $fh, "|-", "perl", "-e", "exit 123") or die $!; close($fh); die("$!\n") if $? == -1; die("Signal ".( $? & 0x7F )."\n") if $? & 0x7F; die("Error ".( $? >> 8 )."\n") if $? >> 8; say "ok"; ' Error 123