From: Shugo Maeda Date: 2000-11-14T23:41:34+09:00 Subject: [ruby-list:25971] Re: 子プロセスから標準出力と終了ステータスを得たい 前田です。 At Tue, 14 Nov 2000 19:55:09 +0900, yharuo@mail7.dddd.ne.jp wrote: > |いや、ですから、$?はwaitのstatusと同じ情報量を持ってないとこまる > |ので、WEXITSTATUS(status)の値だけでは不足なんです。 > |# perlでも$?とWEXITSTATUS(status)の値は一致しません。 > | > |どうして$?とWEXITSTATUS(status)の値が一致しないといけないとお考え > |なのでしょうか? > > 確かにperlとは一致しています。しかし、shやcshとは解釈が異なります。 > 解釈を変えると、プログラマが設定する終了ステータスの意味がなくなり > ませんか? $?と終了ステータスが一致しなくても、終了ステータスを取り出す方法 が提供されていさえすれば、プログラマが設定する終了ステータスの意 味がなくなるとは思いません。 > |> $? をそういう方向に持って行くのなら > |> いっそのこと WEXITSTATUS とか WTERMSIG のようなマクロを使って > |> Process.wexitstatus なんかを追加するとか, > |> $?.wexitstatus, $?.wtermsig でアクセスできるようにするとか. > |> #名前は別として. > | > |のような方向ではいけないのですか? > > 逆に、何故、本来の $? の意味を変えなきゃならないのでしょうか? > Rubyの実装に大きな影響を与えることになるのですか? Rubyはもともとshに代わるものではなく、Perlに代わるものとして設計 されました。 Rubyの$?などのグローバル変数はPerlと同等の機能を提供するために用 意されています。 たとえば、$1や$_はshとはまったく違う意味が与えられていますから、 とくに$?にかぎってshと同じ意味は与える必然性はないと思います。 それと、shとの対称性ということで言えば、$?には直前のメソッド呼び 出しの返り値が入ってた方が自然かもしれません。 # そうした方がよいと言っているわけではないです。 -- 前田 修吾 個人的にはグローバル変数を使わなくて済む方法があれば、その方がよ いと思いますが。