From: matz@... (Yukihiro Matsumoto) Date: 2004-03-30T13:13:44+09:00 Subject: [ruby-dev:23261] Re: File.fnmatch とDir.glob の非互換部分 まつもと ゆきひろです In message "[ruby-dev:23260] Re: File.fnmatch とDir.glob の非互換部分" on 04/03/30, H.Yamamoto writes: |touch a とした後 | |puts File.fnmatch("a\\", "a") |puts File.fnmatch("a\\", "a\\") |puts Dir.glob("a\\") | |を実行すると、 | |false |true |a | |となって、不完全なエスケープの解釈が一貫していません。 ふむ。 |File.fnmatch は、不完全なエスケープを通常文字の'\'とみなし、 |Dir.glob は、PLAIN な場合の不完全なエスケープを remove_backslashes で削除しています。 | |どうするのがいいでしょうか?実装しやすいのは、不完全なエスケープを削除するのが一番です。 |通常文字として扱うと、'a\/b' を '/' で単に分けたときに 'a\' と 'b' になってしまうので、 |'\/' で分けるようにしないといけません。なので、remove_backslashes、glob_make_pattern で |それぞれ余分な条件文を追加しなくてはいけません。 不完全なバックスラッシュを削除してもかまわないとは思うのです けれども、 |不完全なエスケープを削除するだけなら、下のパッチだけですむと思います。'a\/b' を '/' で |分けても、'a\' は 'a' といっしょですから。 というのはよくわかりません。'\/'は「不完全なバックスラッシュ」 ではないような気がしますから。