やり方が分からなかったので、
「STDERRの出力を変数に入れるにはどうしたらいいんだろうなぁ(チラッチラッ」
とツイッターでつぶやいていたら、
@hide_o_55さんと@punytanさんのお二方に教えていただきました。
どうもありがとうございます!
方法は以下の2通りです。
use Test::More tests => 2; use strict; use warnings; # STDERRを使う { local *STDERR; my $stderr; open STDERR, '>', \$stderr or die $!; warn 'error'; like $stderr, qr/^error/; } # $SIG{__WARN__}を使う { my $stderr; local $SIG{__WARN__} = sub { $stderr = shift; }; warn 'error'; like $stderr, qr/^error/; }
warnで出力される文字列が、変数$stderrに格納されることが確認できました。