まつもと ゆきひろです

In message "[ruby-list:5849] Re: CGI script in Ruby"
    on 98/01/10, GOTO Kentaro <gotoken / math.sci.hokudai.ac.jp> 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
相当を入力できます.

                                まつもと ゆきひろ /:|)