Мне кажется, это работает со Strawberry Perl 5.10 и cygwin. Я вывожу оба идентификатора процесса, чтобы убедиться, что смотрю на правильные вещи. Я также положил что-то в $ exe, так что есть команда для выполнения. Любопытно, что open2 работает даже тогда, когда $exe
имеет значение undef и по-прежнему возвращает PID, который не является идентификатором родительского процесса.
use IPC::Open2;
use Symbol qw(gensym);
$exe = 'cmd.exe /c dir /b';
my $in = gensym();
my $out = gensym();
my $pid = open2($out, $in, $exe);
print "I am pid $$: open2 is pid $pid\n";
close $in;
print <$out>;
waitpid $pid, 0;
Тебе не нужны генсим. open2 автоматически сгенерирует дескрипторы файла, если его аргументы будут lvalue, которые не определены.