こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

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

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

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

投稿日時 - 2008-04-19 23:44:26

QNo.3961009

暇なときに回答ください

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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;

標準モジュールではないのでインストールしないといけませんが。

投稿日時 - 2008-04-20 00:53:38

お礼

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

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

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

投稿日時 - 2008-04-21 21:45:27

ANo.1

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

詳しくは man tee などとしてください。

投稿日時 - 2008-04-20 00:25:02

お礼

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

投稿日時 - 2008-04-20 22:52:24

あなたにオススメの質問