遅い反応&File.fnmatchは使った事ない&ruby-devの方では 取り下げてしまっているようですが… From: "H.Yamamoto" <ocean / m2.ccsnet.ne.jp> Date: Thu, 1 Apr 2004 19:37:53 +0900 Message-Id: <20040401193751.7B224A80.ocean / m2.ccsnet.ne.jp> /~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > 先ほど、ruby-dev で > ・Dir.glob(1.9.0) のように、ファイル名の大文字・小文字の区別を DOSISH では「する」非DOSISH では「しない」 > ・FNM_PATHNAME として振舞う > File.fnmatch とは別の関数 File.match? の追加を提案しました。 > > ただ、私自身が File.fnmatch をあまり使わないので、この二つが本当に望ましいのか > (私は Dir.glob との対称性からも望ましいと考えてるのですが)正直確信がありません。 FNM_PATHNAME の方はわかりませんが、大文字・小文字の違いの扱いを動作環境に 合わせる事は必要だと思います。 理由は、大文字・小文字が区別されない環境では、大文字・小文字を区別しないのが 普通で、そうしておかないとバグる可能性が非常に高いからです。 (ファイル名を比較しているのであって単なる文字列を比較しているのではない) また、別の関数にするのではなく、fnmatch の動作を変える案↓に賛成です。 fnmatch 自体 1.7 で追加されたメソッドなので、被害は少ないかと思うのですが… # むしろ Windows 環境でバグっている場合の方が多い気がする From: "H.Yamamoto" <ocean / m2.ccsnet.ne.jp> Subject: [ruby-dev:23295] [proposal] new function for mathing path name Date: Thu, 1 Apr 2004 17:15:56 +0900 Message-Id: <20040401171554.FE4DCB40.ocean / m2.ccsnet.ne.jp> /~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > * 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 を > 渡すと例外(警告)を出す。 Message-Id: <20040401193751.7B224A80.ocean / m2.ccsnet.ne.jp> /~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > 上のような関数があれば、Windows で > File.fnmatch('c:/windows/**/*.bmp', path, File::FNM_PATHNAME | File::FNM_CASEFOLD) > としているのを、 > File.match?('c:/windows/**/*.bmp', path) > ですむようになります。 > > ただ、Dir.glob ならともかく、ファイル名マッチではそもそもこのような使い方はしないのかもしれません。 全ファイル名を問い合わせておいて、パターンによって処理を分ける場合に File.fnmatch を使うと思いますが、その場合は大文字・小文字が区別されない 環境では大文字・小文字を区別しない事がほとんどだと思います。 ---- 馬越