まつもと ゆきひろです

In message "[ruby-dev:22864] Re: File.fnmatch  とDir.glob"
    on 04/02/14, H.Yamamoto <ocean / m2.ccsnet.ne.jp> writes:

|>私には文法エラーと書いてあるようには読めませんでした。
|
|すみません、リンクが間違ってました(汗)
|
|  http://www.linux.or.jp/JM/html/LDP_man-pages/man7/glob.7.html
|
|で、「領域指定は陽に `/' 文字を含むことはできない。これは文法エラーとなる。」とあります。

ここには確かにそう書いてありますが、その実装であるglob(3)に
もfnmatchにも文法エラーをエラーとして返す手段が定義してあり
ません。できるのはせいぜい「マッチしない」ことくらいではない
でしょうか。

|  1. fnmatch でも **/ { } が使えたほうがいい。
|  2. FNM_PATHNAME は **/ があれば必要ないのではないか。現在の fnmatch のデフォルト動作は、
|     シェルと異なり扱いにくい
|
|という意見を読んで、自分でも
|
|  3. { } は glob の前でやっているが、{ } が '/' を含めないようにしてしまえば、
|     fnmatch に移せるんではないか?現在 { } は別々のパターンとして展開している
|     同じパスを複数回処理してしまうが、fnmatch に移せば [ ] 同様に早いし、同じパスは
|     1度だけというようにできる。
|
|という考えがあったので、
|
|  a. { } を globの前ではなく、fnmatch で実装する。
|  b. **/ も fnmatch で使用可能にする。これに伴い、File::FNM_PATHNAMEは廃止する。
|  c. { } と [ ] は '/' を含むことはできない。(例外を出す)
|
|の仕様がよさそうな気がしました。

[]については/を含むものにはマッチしないということで良いのか
もしれませんが、[ruby-dev:22867]にあるように { } に / が許さ
れないのは使い勝手が悪いです。

                                まつもと ゆきひろ /:|)