NAME
IPC::OpenAny - Run a process with control over any FDs it may use.
VERSION
version 0.005
SYNOPSIS
use IPC::OpenAny qw(openany);
open my $fh, '>', 'fd3_out.txt';
my $cmd_sub = sub {
print STDOUT "foo1\n";
print STDERR "foo2\n";
my $fd3_fh = IO::Handle->new_from_fd(3, '>');
print $fd3_fh "foo3\n";
};
# call the class method
my $pid = IPC::OpenAny->run(
cmd_spec => $cmd_sub,
fds => {
0 => undef, # close this
1 => \*STDERR, # foo1
2 => \*STDOUT, # foo2
3 => $fh, # foo3
},
wait => 1,
);
# OR use the exported sub
open my $fd1_fh, '<', $0;
my $pid2 = openany(
cmd_spec => [qw(tr a-zA-Z n-za-mN-ZA-M)],
fds => {
0 => $fd1_fh,
},
);
DESCRIPTION
THIS SOFTWARE IS STILL UNDER DEVELOPMENT PLEASE REPORT ANY BUGS, COMMENTS, OR FEATURE REQUESTS
In the spirit of IPC::Open2 and IPC::Open3, which give you 2 and 3 handles to a child process, IPC::OpenAny makes it easy to start a process with any file descriptors you want connected to whatever handles you want.
METHODS
run
Runs the given command or code-ref in a separate process, with its file descriptors mapped to handles or closed (or just left alone) however the user may choose.
Accepts the following parameters:
- cmd_spec
-
This specifies the command or code to be executed. If it is a string, it will be passed to exec() which will invoke it via the shell. If it is a coderef, that coderef will be executed in a sepearate process just like a system command. If it is an arrayref, the first element will be used as the system command to execute, and the remaining elements will be the arguments passed to it. (string | coderef | arrayref)
- fds
-
Set this to a hashref where the keys are file descriptor numbers in the child process and the values are either perl file handles or undef. (hashref)
- env
-
Set this to a hashref where the keys are the names of environment variables and the values are the values you want set for those env vars when the process is executed. (hashref)
- pwd
-
Set this to the path you want to be the working directory of the process that will be executed. (string)
FUNCTIONS
openany
This exportable sub is just a thin wrapper around the "run" method above. It takes the exact same parameters.
SEE ALSO
CAVEATS
May not work on Win32, and I don't have a windows box with which to develop and test it. Patches welcome!
As usual, please report any other issues you may encounter!
AUTHOR
Stephen R. Scaffidi <sscaffidi@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2012 by Stephen R. Scaffidi.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.