ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者: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での親シェル化を含めて検討してみます。
 
最新から表示回答順に表示