IO::Capture - 標準出力をキャプチャーする
標準出力を試験した場合がときどきあります。対話的なプログラミングを作成したり、print をソースコードの中で使用している関数を試験したい場合などです。
標準出力を取得するには、IO::Captureというモジュール使用します。標準出力が取得できれば、いつもどおりの自動試験を行うだけです。
IO::Captureは標準モジュールではないので、
cpan IO::Capture
でインストールします。
1. 標準出力を取得する
標準出力を取得するには、IO::Capture::Stdoutモジュールを使用します。IO::Captureモジュールをインストールすると一緒についてきます。
startメソッドでキャプチャ開始、stopメソッドでキャプチャ終了です。そのあとに、readメソッドを呼び出すと、キャプチャした標準出力を取得できます。
use IO::Capture::Stdout; my $capture = IO::Capture::Stdout->new; $capture->start; print "aaa"; $capture->stop; my $stdout = $capture->read;
複数回の標準出力を取得したい場合は以下のように記述できます。
$capture->start; print "aaa"; print "bbb"; $capture->stop; my @stdout = $capture->read;
リストコンテキストで、readを呼び出すと、("aaa", "bbb") が取得できます。
2. 標準エラー出力を取得する
IO::Capture::Stderr を使って同じようにできます。
use IO::Capture::Stderr; my $capture = IO::Capture::Stderr->new; $capture->start; print STDERR "aaa"; $capture->stop; my $stderr = $capture->read;