我们正在为我们的一个应用程序进行perl升级(5.6到5.8)。
在5.6中,我们使用下面的示例代码来实现多线程,
$connection->{output} = new IO::File;
my $pid = open ($connection->{output}, "-|");
if (not defined $pid) {
die qq("open fork failed: $!);
} elsif ($pid != 0) {
$connection->{pid} = $pid;
next LOOP;
} else {
select(STDOUT);
$| = 1;
print "Something";
POSIX::_exit(0);
}
但是在perl 5.8中,' - |'不受支持。所以我试图通过fork()做同样的事情。但是如何实现' - |'通过fork并使代码像5.6一样工作。
非常感谢任何帮助..
答案 0 :(得分:1)
defined( my $pid = open ($connection->{output}, "-|") )
or die($!);
if ($pid) {
...
} else {
...
}
类似于
pipe(my ($FROM_CHILD, $TO_PARENT))
or die($!);
defined( my $pid = fork() )
or die($!);
if ($pid) {
close($TO_PARENT);
...
} else {
close($FROM_CHILD);
open(STDOUT, '<&', $TO_PARENT)
or die($!);
...
}