[#46033] cgi をするときのデバック方法について — Nobuyuki Inaba <nobuyuki.inaba@...>

稲葉と申します。

15 messages 2009/05/22
[#46034] Re: cgi をするときのデバック方法について — rubikitch@... 2009/05/23

From: Nobuyuki Inaba <nobuyuki.inaba@gmail.com>

[ruby-list:45990] Re: 質問:IO#set_encoding 後の IO#gets について

From: Tanaka Akira <akr@...>
Date: 2009-05-03 03:57:56 UTC
List: ruby-list #45990
In article <49FCB4DE.4040503@airemix.jp>,
  "NARUSE, Yui" <naruse@airemix.jp> writes:

> このtest.txtは"line 1\r\nline 2\r\n"という内容です。
> universal newlineがONの場合、最初のinput.getsの後、
> カーソルは\rの直後に来ます。
> このときに、Rubyは状態として「CRの直後である」と覚えておきます。
> で、通常は次のgetsの時に、\nが最初に来た場合、これを捨てます。

ちなみに、なぜ \r の後で \n を読まない時点で \n を生成する動
作になっているかというと、改行が \r でも gets が行単位でちゃ
んと終了するようにするためです。

universal newline で \r が来たときに \n を待つようにすると、
改行が \r の環境では 1行 gets で読むためには、次の行 (の最初
のバイト、あるいは EOF) が到着するまで gets がブロックするこ
とになります。

そうすると、相手がパイプや端末だったりすると、よろしくないこ
とが起きます。とくに端末だと、改行キーを押したのに gets が返っ
てこないというあからさまに望ましくない挙動になります。そうい
うことになる環境が実際にあるかどうかは不明ですが。

おそらく、Windows で期待される挙動は universal newline では
なかったのでしょうね。

少なくとも Windows のひとは \r な改行はまず使わないでしょう
から、そのせいで問題が起こるのは、利点と欠点を比較して欠点の
ほうが大きいというか。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread