in reply to When does IPC::Open\d work on Windows, and when doesn't?

Unfortunately I don't have a Windows machine handy at the moment, so I can't answer your question directly. The IPC::Run3 docs do say this:

For each redirector $stdin, $stdout, and $stderr, run3() furnishes a filehandle: if the redirector already specifies a filehandle it just uses that

Running the following test on Linux with strace appears to show this is true even for Perl's in-memory filehandles:

use warnings; use strict; use IPC::Run3 'run3'; my $in = "Foo\nBar\n"; my $out = ""; # This uses temp files: #run3 ['/bin/cat'], \$in, \$out or die "run3"; open my $infh, '<', \$in or die $!; open my $outfh, '>', \$out or die $!; run3 ['/bin/cat'], $infh, $outfh or die "run3"; $?==0 or die "$?";

If that doesn't work, you might also want to give IPC::Run a try.

AFAIK many IPC modules have similar issues on Windows, I think that's part of the reason why IPC::Run3 uses temporary files often - it's more reliable (just compare the CPAN Testers Matrix of IPC::Run3 with any other IPC module).

BTW, you're worried about efficiency, but haven't said what kind of a load you're expecting - are you sure this isn't premature optimization?

Replies are listed 'Best First'.
Re^2: When does IPC::Open\d work on Windows, and when doesn't?
by vr (Curate) on Apr 01, 2017 at 13:16 UTC

    With Perl's in-memory filehandles I get "run3(): Bad file descriptor redirecting STDIN at ...". With IPC::Run and, again, with Perl's in-memory filehandles, script just dies without giving any reason "at C:/PDL24/perl/vendor/lib/IPC/Run.pm line 1852." With references to scalars, IPC::Run works, it seems, just like IPC::Run3.

    The IPC::Run documentation is a bit overwhelming, I'll browse through it, at leisure :)

    As to "premature optimization" - of course, the solution with IPC::Run3 and temp files will work fine. It's not that something is broken and I'm desperate and asking someone to do a research for me. I just thought maybe there already is (and has been for a long time) some FAQ list with nicely enumerated items, etc. :) Thank you for answer.