角待ちは対空

おもむろガウェイン

標準出力(標準エラー出力)の内容を一時的に Perl 変数に書き込みたい

Devel::Peek::Dump なんかは結果が標準エラー出力に表示されるだけなのでコード内で結果を使いたいと思うと標準エラー出力の出力先を変数へ書き換え、その後復元させてやる必要がある。

use strict;
use warnings;
use utf8;

my $stderr;

open my $temp, '>&', STDERR;
close STDERR;
open STDERR, '>', \$stderr;

warn "hoge";

close STDERR;
open STDERR, '>&', $temp;
close $temp;


print $stderr; # ”hoge”  が出力される

こんな感じで取りあえずうまくいくんだけど、もっといい方法はないのだろうか。

  • tie を使うのは大げさな気がする
    • 結び付けられるクラスを用意しなくてはならない?
    • Tie::STDOUT 系のやつ使えば良い?
    • あまり詳しくないので勘違いしているかも

open の第二引数

自分用メモ。

  • > は書き込み
  • < は読み込み
  • &dup(2) して open される