質問 |
||
| 質問者:renkado | 標準出力しながらファイルに出力 | |
|---|---|---|
困り度:
|
標準出力に表示したものを、そのままファイルに書き込むことは可能でしょうか? 例えば下記のように実現できるかと思いますが、printする度に2行書くのは厳しく思ってます。 ----------------------------- open(OUT, "> outfile.txt") ; print $aaa ; print OUT $aaa ; ----------------------------- |
|
質問投稿日時:08/04/19 23:44 質問番号:3961009 |
||
回答 |
|
| 回答者:sakusaker7 | 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; 標準モジュールではないのでインストールしないといけませんが。 |
|---|---|
| 種類:回答 どんな人:経験者 自信:参考意見 |
|
| |
回答日時:08/04/20 00:53 回答番号:No.2 |
|
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | ありがとうございます。 まさに求めていた処理です。 標準モジュールではないのですね。。 複数のLinuxマシンから参照されるモジュールに対して この処理を考えておりまして、 できれば標準モジュールにて処理を行いたいと考えていたのですが どうやら厳しいようなので参考にさせて頂きます。 |
回答 |
|
| 回答者:mashkun | 「標準出力に」ということならコマンドラインからの起動でしょうから、teeコマンドにフィルタするようにすればお望みのことができます。 詳しくは man tee などとしてください。 |
|---|---|
| 種類:回答 どんな人:専門家 自信:自信あり |
|
| |
回答日時:08/04/20 00:25 回答番号:No.1 |
|
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | ご回答ありがとうございます。 まさにやりたいことはteeでの動作と同じです。 ですが、多人数で使用するスクリプトなので、 使用する人がフィルタを毎回せずに処理ができればと考えておりました。 もし標準モジュール内で可能な手段があれば嬉しいです。 teeでの親シェル化を含めて検討してみます。 |