From: matz@... (Yukihiro Matsumoto) Date: 1998-01-12T11:38:58+09:00 Subject: [ruby-list:5855] Re: CGI script in Ruby まつもと ゆきひろです In message "[ruby-list:5849] Re: CGI script in Ruby" on 98/01/10, GOTO Kentaro writes: |ごとけんです | > $stderr = STDOUT | > | > のように代入すると | > | > $stderr.reopen(STDOUT) | > | > と同じ動作をすることです. | |そういう風に変更されたのですね。知らなかったです (^^; 以前は単なるread-only global variableでしたからね.reopenが できた時に変更しました. |ruby にもし tee(1) みたいなのがあって、出力先を複製できるなら、 |いいのですが、そういうことはできないようなので |人が出してくれたエラーも記録するために stderr と stdout は |分けて使っています。 print,printfのデフォルト出力先変数$>に関してはwriteメソッドを 理解するオブジェクトならなんでも良いようになっています. class TeeIO def initialize(io, log) @io = io @log = open(log, "w") end for method in ['write', 'print', 'printf', 'close'] eval "def #{method}(*args); @io.#{method}(*args);@log.#{method}(*args);end" end end なんてクラスをつくっておけばtee(1)の代わりになるんではないで しょうか? $stdin,$stdout,$stderrについてはちょっと無理そうです.という のもリンクしたライブラリなどrubyの変数を参照しないものをリダ イレクトするためにreopenが必要そうだからです. |tty からテストする理由は syntax エラーを拾うためです。 | |% setenv QUERY_STRING 'a=1&b="hehe"' |% setenv REQUEST_METHOD GET |% hoge.cgi | |みたいにしてます。これは ruby 1.1 ではしなくてもよいこと |なのでしょうか? (実はいまだに 1.0) 1.1についている青山さん拡張のcgi-lib.rbは環境変数 REQUEST_METHODが定義されていないと標準入力からQUERY_STRING 相当を入力できます. まつもと ゆきひろ /:|)