IO::Capture - 標準出力をキャプチャーする



  1. Perl




  2. モジュール



  3. here

 標準出力を試験した場合がときどきあります。対話的なプログラミングを作成したり、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;