こんにちは、高石です。

私も同じような問題にぶつかったことがありました。

# DOS用のソフトの出力(SJIS)を処理する自作ライブラリを、別の
# 目的で作ったスクリプト(EUC)と組合せて利用しようとrequireし
# たらパースエラー。

その時はパースエラーになるんじゃどうしようもないと思って、本
体のスクリプトをSJISに変換して使ったのですが、requireする前
に$KCODEを設定することでパースエラーが回避できるなら、あるい
は別の解決策もあったかもしれないと思い、ちょっと実験してみま
した。

ruby 1.6.6 (2001-12-26) [i686-cygwin]

- sub_sjis.rb -

$str_a = '表示'
$reg_a1 = %r(表)
$reg_a2 = %r(表)s
$str_b = 'あ'
$reg_b = %r(あ)

def test_match(str)
  str =~ /表/s
end

def test_sub
  $str_a.sub(/\\/s,':')
end
---

- main_euc.rb -

#!/usr/local/bin/ruby -Ke

require 'nkf'

$KCODE='s'
require './sub_sjis'
$KCODE='e'

a_euc = '表'
a_sjis = NKF.nkf('-s',a)

#puts $str_a =~ $reg_a1 # => 実行時にRegexpError
puts $str_a =~ $reg_a2 # => 0 (OK)
puts $str_b =~ $reg_b # => 0 (OK)

puts test_match(a_euc)  # => nil (OK)
puts test_match(a_sjis) # =>   0 (OK)

puts test_sub              # => '表示' (OK)
puts $str_a.sub(/\\/,':')  # => '・示' (NG)
puts $str_a.sub(/\\/s,':') # => '表示' (OK)

puts $str_a.split(//).join(':')  # => '・\:示' (NG)
puts $str_a.split(//s).join(':') # => '表:示'  (OK)
---

Regexpは、ライブラリ側で文字コードの指定(//s)さえしておけば
そのまま使えそうですが、ライブラリから得られたStringを本体側
で加工して使いたい場合は文字コードを意識して書かないとだめな
ようですね。
# いずれStringが自分の文字コードを保持するようになれば解決?

とりあえず私の目的には現状のままでも使えそうなので、個人的に
は今回の件は大収穫です。

# といっても、問題のスクリプトはすでに書き直して使っているか
# らさしあたり必要はないんだけど:-P
/--------------------------------------------------------/
  高石 勇人 < rio-t / presen.to >
  PGP Key(RSA): http://rio-t.presen.to/pgp/mykey.asc
         (DSS): http://rio-t.presen.to/pgp/mykey-dss.asc
/--------------------------------------------------------/