
Issue #20406 has been updated by shyouhei (Shyouhei Urabe). Seems like a real bug to me. ``` % docker run --rm -it -e 'ALL_RUBY_SINCE=ruby-1.8.7' rubylang/all-ruby ./all-ruby -e 'p(/#{} a/e.encoding)' ruby-1.8.7 -e:1: undefined method `encoding' for / a/e:Regexp (NoMethodError) exit 1 ... ruby-1.8.7-p374 -e:1: undefined method `encoding' for / a/e:Regexp (NoMethodError) exit 1 ruby-1.9.0-0 #<Encoding:EUC-JP> ... ruby-1.9.2-preview1 #<Encoding:EUC-JP> ruby-1.9.2-preview3 #<Encoding:US-ASCII> ... ruby-3.3.0 #<Encoding:US-ASCII> ``` ---------------------------------------- Misc #20406: Question about Regexp encoding negotiation https://bugs.ruby-lang.org/issues/20406#change-107796 * Author: andrykonchin (Andrew Konchin) * Status: Open ---------------------------------------- I am wondering what are the rules to calculate Regexp literal encoding in case an encoding modifier is specified. From the documentstion:
By default, a regexp with only US-ASCII characters has US-ASCII encoding: ... A regular expression containing non-US-ASCII characters is assumed to use the source encoding. This can be overridden with one of the following modifiers. //n ... //u ... //e ... //s ...
Looking at the following examples I would assume that these rules are followed except one case: ```ruby p /\xc2\xa1/e .encoding # EUC-JP p /#{ }\xc2\xa1/e .encoding # EUC-JP p /a/e .encoding # EUC-JP p /a #{} a/e .encoding # EUC-JP p /#{} a/e .encoding # US-ASCII ``` The last Regexp `/#{} a/e` is supposed to have `EUC-JP` encoding but has `US-ASCII`. So I am wondering what rule is applied in this case. -- https://bugs.ruby-lang.org/