標準出力、標準エラー出力への書き込みを別々に
取得したい場合に便利に使えます。
ソース
#!/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
一からできなくもないことだけど、面倒な処理なので
手っ取り早く、標準出力、標準エラー出力を分けて得たいと
いう場合にはいい選択肢だと思います。