• 締切済み

標準出力しながらファイルに出力

標準出力に表示したものを、そのままファイルに書き込むことは可能でしょうか? 例えば下記のように実現できるかと思いますが、printする度に2行書くのは厳しく思ってます。 ----------------------------- open(OUT, "> outfile.txt") ; print $aaa ; print OUT $aaa ; -----------------------------

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

IO::Tee を使うとか。 EXAMPLE use IO::Tee; use IO::File; my $tee = new IO::Tee(\*STDOUT, new IO::File(">tt1.out"), ">tt2.out"); print join(' ', $tee->handles), "\n"; for (1..10) { print $tee $_, "\n" } for (1..10) { $tee->print($_, "\n") } $tee->flush; 標準モジュールではないのでインストールしないといけませんが。

renkado
質問者

お礼

ありがとうございます。 まさに求めていた処理です。 標準モジュールではないのですね。。 複数のLinuxマシンから参照されるモジュールに対して この処理を考えておりまして、 できれば標準モジュールにて処理を行いたいと考えていたのですが どうやら厳しいようなので参考にさせて頂きます。

  • mashkun
  • ベストアンサー率23% (86/364)
回答No.1

「標準出力に」ということならコマンドラインからの起動でしょうから、teeコマンドにフィルタするようにすればお望みのことができます。 詳しくは man tee などとしてください。

renkado
質問者

お礼

ご回答ありがとうございます。 まさにやりたいことはteeでの動作と同じです。 ですが、多人数で使用するスクリプトなので、 使用する人がフィルタを毎回せずに処理ができればと考えておりました。 もし標準モジュール内で可能な手段があれば嬉しいです。 teeでの親シェル化を含めて検討してみます。

関連するQ&A