From: "H.Yamamoto" Date: 2004-04-01T17:15:56+09:00 Subject: [ruby-dev:23295] [proposal] new function for mathing path name 山本です。 本当は Dir.glob と File.fnmatch の互換がとれてから提案したかったのですが、時間がかかりそうなので 先に提案しておきます。 FNM_PATHNAME の動作をし、Dir.glob のように case sensitivity が環境依存な関数をつくれば便利だと思うの ですが、いかかでしょうか?何通りか仕様を考えてみました。 * 1. 完全に互換のとれる仕様 File.fnmatch はそのままで、File.match? という関数を追加する。この関数は FNM_PATHNAME な動作をし、 case sensitivity は環境依存である。FNM_NOESCAPE, FNM_DOTMATCH のフラグが使用可能で、 FNM_PATHNAME, FNM_CASEFOLD が渡されると、例外(警告)を出す。 * 2. DOSISH に限り、File.fnmatch に FNM_CASEFOLD を指定しない場合に動作が変わる(大文字・小文字を区別しなくなる) 新たにフラグ FNM_CASECARE(大文字・小文字を区別する)を追加する。 File.fnmatch に FNM_CASEFOLD が指定されない場合、case sensitivity は環境依存とする。 FNM_CASEFOLD が指定された場合は、環境に関係なく「大文字・小文字を区別しない」で、 FNM_CASECARE が指定された場合は、環境に関係なく「大文字・小文字を区別する」とする。 File.match? は、File.fnmatch(pattern, string, FNM_PATHNAME | flags) と同等で、FNM_PATHNAME を 渡すと例外(警告)を出す。 * 3. Dir.glob のフラグ、FNM_DOTMATCH で互換が失われる FNM_PERIOD の復活が望ましいとの議論があったので、これを機に復活させる。一方、Dir.glob は 「'.'にマッチしない」のがデフォルトであるため、Dir.glob と File.fnmatch でフラグを分ける必要がある。 仮にこれを Dir::GLOB_NOESCAPE, Dir::GLOB_PERIOD (Dir::GLOB_DOTMATCH?) とすると、File.match? も Dir::GLOB_* を使うように定義する。 1.が一番導入しやすそうです。あと、私はあまり fnmatch を使わないのでよくわからないのですが、FNM_PERIOD と FNM_DOTMATCH では、fnmatch を使う上でどちらが望ましいのでしょうか?FNM_PERIOD! という場合は 3. になる のかもしれません。あまりにも互換に問題があるのでしり込みしてしまいますが・・・