山本です。

>  ・File.fnmatch の挙動は、世間に流通している fnmatch(3) と同一なので問題ない
>  ・fnmatch(3) は SUSv3 に準拠してない(涙)
>  ・むしろ Dir.glob の '[a/c]' の解釈が glob(3) と違う可能性がある
>
>ということですね。glob(3) についてよくわからないので、とりあえず
>
>  ・'*' の高速化
>  ・'**/' の実装
>  ・セパレータは '/' だけ
>
>だけ変更することにして、もう一度実装しなおします。(FNM_PERIOD 復活は議論待ち)

Dir.glob は、まつもとさんが仰っていたように、'[a/c]' 全体をエントリと比較することにしました。
glob(3) の動作も、たぶんこうなのだと思います。

これで OK と思ったのですが、また一貫性のない部分を発見してしまいました(涙)

E:\ruby-cvs>miniruby -ve "puts File.fnmatch('[ab', '[ab')"
ruby 1.9.0 (2004-02-24) [i386-bccwin32]
false

E:\ruby-cvs>touch [ab
Touch  Version 4.2  Copyright (c) 1998 Borland International


E:\ruby-cvs>miniruby -ve "puts Dir.glob('[ab')"
ruby 1.9.0 (2004-02-24) [i386-bccwin32]
[ab

has_magic では、閉じてない '[' は PLAIN として扱ってるのですが、File.fnmatch では単にマッチしないとして
いるためです。

fnmatch(3) ではどのような動作でしょうか?よろしくお願いします。