読者です 読者をやめる 読者になる 読者になる

初代Masteries

きっとモヒカンにもなれないお前たちに告げる!!!

Perlで標準出力や標準エラー出力をキャプチャーする

perl

今日の(?)Tipsコーナーです.

Perlで, printやwarnなどで出力した標準出力や, 標準エラー出力をキャプチャーしたい場合, Capture::Tinyを使えばいい感じに処理できるようです.

use Capture::Tiny ':all';
 
($stdout, $stderr) = capture {
    ...
};

こんな感じで書けば, captureに与えたコードリファレンスの中で出力された標準出力と標準エラー出力が, それぞれ'$stdout'と'$stderr'に格納されます.

但しこの場合, 標準入力と標準エラー出力は変数に格納するのみで, 端末上に表示されなくなるので, 変数に格納しつつ端末にも表示したい場合は,

($stdout, $stderr) = tee {
    ...
};

'capture'の代わりに'tee'を使ってやればOKです.