新井です。

In message "[ruby-list:30947] Re: file exist check method?"
  on Fri, 17 Aug 2001 19:53:09 +0900,
  "U.Nakamura" <usa / osb.att.ne.jp> wrote:
> こんにちは、なかむら(う)です。
> 
> At Aug.17,2001 19:11:55, <inoue / motonet.co.jp> wrote in
>     '[ruby-list:30945] file exist check method?'
> > ファイルの存在チェックで以下のパスの場合、うまくいきませんでした。
> > Dirでは空白文字はサポート外でしょうか?
> > 
> > path='D:\Program Files\Apache Group\Apache\htdocs\mityaiya\xxx.jpg'
> > print "Oh My God!" if 0 == Dir.glob(path).size

> 1. \は特殊文字なので\\と書かなければいけない。/を使ったほう
>    が無難。

上ではシングルクォートだから問題ないのでは?

> 2. Dir.globは空白文字を特殊な意味で扱う(リファレンスマニュア
>    ル参照)。

これはそうなのですが、

>    というわけで、空白文字を含むパスを扱う場合はその前に\を書
>    かないといけない。

ruby1.6 では、\ は(globにとって)メタ文字ではないのでこれができません。
# Windows 版では違うのでしたっけ?

touch foo\ bar
ruby-1.6 -ve 'p Dir.glob("foo\\ bar"); p Dir.glob("foo bar")'
=> ruby 1.6.4 (2001-08-06) [i586-linux]
   []
   []

ruby1.7 では、空白をそのまま扱う(特殊文字は'\0'だけになった)
のでバックスラッシュがいりません。

| Mon Jun 25 09:54:48 2001  Yukihiro Matsumoto  <matz / ruby-lang.org>
| 
| 	  * dir.c (isdelim): space, tab, and newline are no longer
| 	    delimiters for glob patterns.

touch foo\ bar
ruby-1.7 -ve 'p Dir.glob("foo\\ bar"); p Dir.glob("foo bar")'
=> ruby 1.7.1 (2001-08-14) [i586-linux]
   []
   ["foo bar"]

というのが、現在の仕様のようです。
# 1.7 の挙動はまだ変更される可能性がありそうです。

# 1.7 で \ がメタ文字になってないのはバグ?

Index: dir.c
===================================================================
RCS file: /usr/local/cvsup/ruby/ruby/dir.c,v
retrieving revision 1.50
diff -u -r1.50 dir.c
--- dir.c	2001/07/14 15:17:18	1.50
+++ dir.c	2001/08/17 12:49:11
@@ -887,7 +887,7 @@
 	    if (*p == '{') nest+=2;
 	    if (*p == '}') nest+=3;
 	    if (*p == '\\') {
-		*t++ = *p++;
+		*t = *p++;
 		if (p == pend) break;
 	    }
 	    *t++ = *p++;

修正後:

touch foo\ bar
ruby-1.7 -ve 'p Dir.glob("foo\\ bar"); p Dir.glob("foo bar")'
ruby 1.7.1 (2001-08-14) [i586-linux]
["foo bar"]
["foo bar"]

--
新井康司 (Koji Arai)