Dir.glob を Shift_JIS でも動くようにする
こんなんでいけた。
ただ、ruby 1.8.3 以降だと必要ないとかって噂もある。使ってないから判らないけど。
ruby で defadvice とか aspect っぽい事をやるにはこうすればいいのね。
Module.method で symbol-function みたいに元の定義を取っておいて、上書きすると。
class Dir # 元の glob メソッドを取っておく @@orig_glob_method = self.method(:glob) # Shift_JIS を考慮した glob に変更 def self.glob(pattern, flags = 0, &block) new_pattern = "" pattern.each_char {|c| # Shift_JIS の文字だったときに、glob のワイルドカードにひっかかるものをエスケープする if c.mbchar? c.each_byte {|b| new_pattern << b.chr.sub(/[?{}\[\]]/, '\\' + b.chr)} else new_pattern << c end } # 差し替えた pattern で元の glob を呼ぶ @@orig_glob_method.call(new_pattern, flags, &block) end end