標準出力、標準エラー出力への書き込みを別々に
取得したい場合に便利に使えます。
ソース
#!/usr/bin/env perl
use strict;
use warnings;
use Capture::Tiny qw(capture);
my ($stdout, $stderr) = capture {
warn "message to STDERR";
print "message to STDOUT";
};
print "STDOUT: $stdout\n";
print "STDERR: $stderr\n";
($stdout, $stderr) = capture {
my @cmd;
@cmd = ('ls', '-F', $ENV{HOME} . "/.emacs");
system @cmd;
@cmd = qw{ls no_such_file};
system @cmd;
};
print "STDOUT: $stdout\n";
print "STDERR: $stderr\n";
結果
% perl capture_tiny.pl STDOUT: message to STDOUT STDERR: message to STDERR at capture_tiny.pl line 8. STDOUT: /Users/syohei/.emacs@ STDERR: ls: no_such_file: No such file or directory
一からできなくもないことだけど、面倒な処理なので
手っ取り早く、標準出力、標準エラー出力を分けて得たいと
いう場合にはいい選択肢だと思います。