[#45988] 質問:IO#set_encoding 後の IO#gets について — Dice <rubyist@...>
Diceです。
4 messages
2009/05/02
[#46005] [ANN] locale-2.0.3, locale_rails-2.0.3, gettext-2.0.3, gettext_activerecord-2.0.3, gettext_rails-2.0.3 — Masao Mutoh <mutomasa@...>
むとうです。
3 messages
2009/05/09
[#46014] 複数バージョンのRubyに対応するRSS::Makerの使い方 — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
4 messages
2009/05/13
[#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>
[#46040] RoR on Linux で MS-SQL にアクセスしたい
— しん <dezawa@...>
2009/05/28
出沢@神奈川です
[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]