山本です。

>|それで思いついたのですが、マジック文字の優先順位を
>|
>|  1. { }
>|  2. /
>|  3. [ ], *, ?
>|
>|という風にするのはどうでしょうか?
>|
>|そうすれば、領域指定に '/' が含まれるということは、原理上なくなります。
>
>気になるのはfnmatchって/を特別扱いしない使い方もしたいのでは
>ないでしょうか。だからこそ、FNM_PATHNAMEが存在して、指定しな
>ければ[/]にマッチ、指定すれば[/]はマッチしないという仕様になっ
>ているのだと思うのですが。

[ruby-dev:16568] で **/ があれば FNM_PATHNAME はいらないんじゃないか、
という意見が出て、その後反論もなかったようなので、linuxのfnmatchには**/がない代わりに
FNM_PATHNAMEがあるのだと思っていました。

個人的には、この変更は捨てがたいです。[ruby-dev:22864]で

>glob_make_pattern() で、単に '/' ではなく、マジックを考慮して分割すればよさそうですが・・・

と書いたんですが、これではエントリ名に 'hoge[/]hoge' をマッチさせる動作になり、fnmatchの
動作と異なってしまいます。'/' を '[' に優先させれば、この問題は解決します。

///////////////////////////////////////////////////////////////////////////////////

>|  E:\ruby-cvs\ruby>miniruby -ve "puts File.fnmatch('c?/hoge', 'c:/hoge')"
>|  ruby 1.9.0 (2004-02-08) [i386-bccwin32]
>|  true
>|
>|は、意図された動作でしょうか?(これは違うと思いますが・・・)
>
>意図してると思いますけど。私の理解ではfnmatchは単なるパター
>ンマッチャですから、これはドライブレターであるとかの解釈は不
>要だと思います。でないとshのcaseのような使い方で困るのではな
>いかと。
>
>具体的にどう感じられたか教えていただけませんか?

Dir.glob('?:/hoge') が 'A:/hoge', 'B:/hoge' を列挙しないのと同様に、
File.fnmatch('?:/hoge', 'A:/hoge') もマッチないほうが一貫性があるのではないかと感じました。

それに 'c?/hoge' だと、「カレントの 'cc' フォルダの 'hoge'」 と、「'c:' ドライブのルートの 'hoge'」
という、異種のパスがマッチしてしまうのも変な感じがしました。

でも、確かにパターンマッチャだし、これを利用する使いかたがあるなら、
変えないほうがいいかもしれません。