プロが教えるわが家の防犯対策術!

標準出力に表示したものを、そのままファイルに書き込むことは可能でしょうか?

例えば下記のように実現できるかと思いますが、printする度に2行書くのは厳しく思ってます。

-----------------------------
open(OUT, "> outfile.txt") ;
print $aaa ;
print OUT $aaa ;
-----------------------------

A 回答 (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;

標準モジュールではないのでインストールしないといけませんが。
    • good
    • 0
この回答へのお礼

ありがとうございます。
まさに求めていた処理です。

標準モジュールではないのですね。。

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

お礼日時:2008/04/21 21:45

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



詳しくは man tee などとしてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/04/20 22:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!