From: Takashi Tamura Date: 2009-08-01T17:08:32+09:00 Subject: [ruby-dev:38976] [Bug #1503] -Kuをつけた時、/[#{s}]/n と Regexp.new("[#{s}]",nil,"n") で実行結果が異なる チケット #1503 が更新されました。 (by Takashi Tamura) こんにちは、sheepman です。 > 一方、/[#{s}]/nは > /--<\xFF>/nとソースコードにそのままリテラルで書くのと、 > 基本的には同じなので、当然invalid multibyte char扱いでエラーになります。 エンコーディングが適切に設定されていれば、たとえスクリプトエンコーディングと 異なっていても問題ないみたいです。この例の場合、s のエンコーディングが ASCII-8BIT なら ok のようです。 $ cat e02.rb # coding: euc-jp s = "\x00-\x1f\x7f-\xff".force_encoding("ASCII-8BIT") p /[#{s}]/.encoding p /[#{s}]/n.encoding $ ruby-1.9 -v ruby 1.9.2dev (2009-08-01 trunk 24343) [i686-linux] $ ruby-1.9 e02.rb # # ここからが質問です。 /#{s}/n は /#{s.dup.force_encoding("ASCII-8BIT")}/ と同じ動作をするように しても良いように思えるのですが、そうしない理由はなんでしょうか? つまり「Regexp.new(s, nil, "n") は Regexp.new(s.dup.force_encoding("ASCII-8BIT"))と同じだけど、 /#{s}/n は /#{s.dup.force_encoding("ASCII-8BIT")}/ と同じではない」理由が知りたいです。 ---------------------------------------- http://redmine.ruby-lang.org/issues/show/1503 ---------------------------------------- http://redmine.ruby-lang.org