make test で実行するテストスクリプトの中で、標準エラー出力を止めたい場合がある (わざとエラーを起こす時など)。
Perl 5.8.8 の ExtUtils/MM_Unix.pm を参考に
{ local *STDERR_COPY; my $duped = 0; $duped = 1 if open(STDERR_COPY, '>&STDERR'); open(STDERR, '> ' . File::Spec->devnull()) if $duped; my $result = `$command`; my $status = $?; open(STDERR, '>&STDERR_COPY') if $duped; } warn "This message is printed to STDERR\n";
としてみた。 Linux と Win32 ではとりあえずうまくいって動いている。
(open が2引数なのは、当時古い Perl バージョンでも動くように書いたから)
Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。