use strict; use IO::Socket; use IPC::Open3; my $childwriter; my $childreader; socketpair($childwriter, $childreader, AF_UNIX, SOCK_STREAM, PF_UNSPEC) || die "socketpair: $!"; my $stderrchildwriter; my $stderrchildreader; socketpair($stderrchildwriter, $stderrchildreader, AF_UNIX, SOCK_STREAM, PF_UNSPEC) || die "socketpair: $!"; my (@cmd) = "java -version 2>&1"; print "File handles:\n"; printf "out: $childwriter (%d), $childreader (%d)\n", fileno($childwriter), fileno($childreader); printf "err: $stderrchildwriter (%d), $stderrchildreader (%d)\n", fileno($stderrchildwriter), fileno($stderrchildreader); my $childpid = open3("<&$childreader", ">&$childreader", ">&$stderrchildreader", @cmd);