From: Yukihiro Matsumoto Date: 2008-10-17T23:45:29+09:00 Subject: [ruby-dev:36769] Re: [Bug #650] Marshal.load raises RegexpError まつもと ゆきひろです In message "Re: [ruby-dev:36750] [Bug #650] Marshal.load raises RegexpError" on Wed, 15 Oct 2008 22:59:59 +0900, Shyouhei Urabe writes: |以下のように、以前のバージョンのRubyで正しくdumpしたはずの文字列をtrunkでloadできません。 | | % ruby1.8 -e 'Marshal.dump(/C:\Documents and Settings\urabe/, STDOUT)' | ruby1.8 -ve 'p Marshal.load(STDIN)' | ruby 1.8.7 (2008-10-11 revision 17572) [x86_64-linux] | /C:\Documents and Settings\urabe/ 1.9では正規表現に\uが増えたからですね。 厳密に言うとmarshalに上位互換性がないのでmarshalのメジャーバー ジョンを変化させるべきなのかもしれませんが、メリットよりもデ メリットの方が大きいのでそれはしない方向を考えてます。 で、1.8の方のregexpに手を入れて「\u」は「u」に正規化しようと 思います。そうすると、上のだと C:\Documents and Settingsurabe になってしまうわけですが、もともと\Dは[0-9]という意味で、上の 正規表現はもともとパスにはマッチしないんで、これはこういうも のだと思ってください。バックスラッシュを含むパターンはちゃん と\\に変換してくださいということで。 まつもと ゆきひろ /:|)