安達@沖データと申します。

奇妙な動作を見付けたので、報告しときます。動作環境はこれ↓です。

% ruby --version
ruby 1.8.1 (2004-03-02) [i386-freebsd5.2]

(1) 無意味なバックスラッシュを入れると数が合わない?

irb(main):010:0> " \ab\de\ff"
=> " \abde\ff"

これって、" abdeff"か" \ab\de\ff"かのどちらかになって欲しい気がします。
もちろんlengthで数えると長さは7です。


(2) gsubが正しく動いていない???

irb(main):001:0> " \\ab\\de\\ff".gsub(/\\([a-f][a-f])/o, "\\1")
=> " abdeff"

これは、予想通り。

irb(main):002:0> " \\ab\\de\\ff".gsub(/\\([a-f][a-f])/o, "\\1".to_i(16).chr)
=> " \000\000\000"

これは、おかしい。

irb(main):003:0> " \\ab\\de\\ff".gsub(/\\([a-f][a-f])/o) { | c |            
irb(main):004:1*    c.to_i(16).chr
irb(main):005:1> }
=> " \000\000\000"

これも、おかしい。

ちなみに、

irb(main):009:0> " abdeff".gsub(/([a-f][a-f])/o, "\\1".to_i(16).chr)
=> " \000\000\000"

これもやっぱりおかしいけれど、

irb(main):010:0> " abdeff".gsub(/([a-f][a-f])/o) { | c |
irb(main):011:1*   c.to_i(16).chr
irb(main):012:1> }
=> " \253\336\377"

これなら予想通り。

#なんなんでしょう?
--
*------*		
|人∧鷲|		安達 淳@個人回線
| <女> |		Via Asahi-net
|牛∨獅|		adachi / jun.email.ne.jp
*------*