2009-03-04
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;
トラックバック - http://d.hatena.ne.jp/perlcodesample/20090304/1235217752
リンク元
- 805 http://www.perlcodesample.com/perltut/tocsimple.html
- 433 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GZEZ_jaJP280JP281&q=正規表現 複数行
- 254 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja-JP-mac:official&hs=ee3&q=rmtree+perl&btnG=検索&lr=lang_ja
- 192 http://www.perlcodesample.com/perltut/tocviewernavi.html
- 101 http://www.google.co.jp/search?hl=ja&lr=lang_ja&client=firefox-a&rls=org.mozilla:ja-JP-mac:official&hs=QQi&q=linux+fedora&revid=978571988&ei=Vl-ZSaS1K9XLkAWUqtieCw&sa=X&oi=revisions_inline&resnum=1&ct=broad-revision&cd=5
- 101 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=Perl+改行+削除&num=50
- 74 http://www.google.co.jp/search?hl=ja&q=perl+ファイル読み込み パス&meta=lr=&aq=0
- 68 http://www.perlcodesample.com/perltut/tocviewer.html
- 62 http://www.google.co.jp/search?sourceid=navclient&aq=t&hl=ja&ie=UTF-8&rlz=1T4DBJP_jaJP313JP313&q=サブルーチン
- 59 http://www.google.co.jp/search?client=firefox-a&rls=org.mozilla:ja:official&channel=s&hl=ja&q=ファイルリードエラー&lr=&btnG=Google+検索