IO::CaptureOutput - capture STDOUT/STDERR from subprocesses and XS/C modules
use IO::CaptureOutput qw(capture capture_exec qxx); my ($stdout, $stderr); capture sub {noisy(@args)}, \$stdout, \$stderr; sub noisy { my @args = @_; warn "this sub prints to stdout and stderr!"; ... print "finished"; } ($stdout, $stderr) = capture_exec('perl', '-e', 'print "Hello "; print STDERR "World!"');
This module provides routines for capturing STDOUT and STDERR from forked system calls (e.g. system(), fork()) and from XS/C modules.
system()
fork()
The following functions are be exported on demand.
Captures everything printed to STDOUT and STDERR for the duration of &subroutine. $output and $error are optional scalar references that will contain STDOUT and STDERR respectively.
STDOUT
STDERR
&subroutine
$output
$error
Returns the return value(s) of &subroutine. The sub is called in the same context as capture() was called e.g.:
capture()
@rv = capture(sub {wantarray}); # returns true $rv = capture(sub {wantarray}); # returns defined, but not true capture(sub {wantarray}); # void, returns undef
capture() is able to trap output from subprocesses and C code, which traditional tie() methods are unable to capture.
tie()
Note: capture() will only capture output that has been written or flushed to the filehandle.
Captures and returns the output from system(@args). In scalar context, capture_exec() will return what was printed to STDOUT. In list context, it returns what was printed to STDOUT and STDERR
system(@args)
capture_exec()
my $output = capture_exec('perl', '-e', 'print "hello world"'); my ($output, $error) = capture_exec('perl', '-e', 'warn "Test"');
capture_exec passes its arguments to CORE::system it can take advantage of the shell quoting, which makes it a handy and slightly more portable alternative to backticks, piped open() and IPC::Open3.
capture_exec
CORE::system
open()
IPC::Open3
You can check the exit status of the system() call with the $? variable. See perlvar for more information.
$?
This is an alias of capture_exec
IO::Capture
IO::Utils
Simon Flack <simonflk _AT_ cpan.org>
Copyright 2004, 2005 Simon Flack <simonflk _AT_ cpan.org>. All rights reserved
You may distribute under the terms of either the GNU General Public License or the Artistic License, as specified in the Perl README file.
To install IO::CaptureOutput, copy and paste the appropriate command in to your terminal.
cpanm
cpanm IO::CaptureOutput
CPAN shell
perl -MCPAN -e shell install IO::CaptureOutput
For more information on module installation, please visit the detailed CPAN module installation guide.