まつもとさん、みなさん、はじめまして。
とめ と申します。つい最近始めたRuby初心者です。

早速ではありますが、不具合らしき現象を発見しましたので
報告いたします。バージョンは
ruby 1.8.1 (2003-12-25) [i386-mswin32]
です。

■現象
ヒアドキュメント形式で外部コマンド(<-なんといえばよいのでしょうか)
を実行すると、プログラムが見つからないといわれて実行に失敗します。
コマンド出力 `command` 形式ではOKです。

■エラーメッセージの例
debug.rb:14:in ``': No such file or directory - ls.exe (Errno::ENOENT)

■プログラムの例
#bad
p <<`EOC`
ls.exe
EOC
#good
p `ls.exe`

■デバッグ
少しだけ、コードを追いかけてみました。
win32/win32.c の CreateChild の中で、CreateProcess が呼ばれていますが、
これに引き渡される cmd は 'ls.exe\n' となっています。
つまり、行末の'\n'がchompされないままなので、失敗しています。
同じように、以下のようなRubyプログラムの場合

#bad2 (indented)
  p <<-`EOC`
  ls.exe
  EOC

やはり、先行するwhitespaceまで含めて引き渡されるので、
そのようなファイルは無いということになってしまいます。

■対応案
遅くとも win32/win32.c の CreateChildの中で、isInternalCmd() で、
cmd文字列中にパイプやリダイレクトも含まれず、内部コマンドでない
と判断されたあとで、先行するwhitespaceと行末の改行をけずってやる
必要があると思われます。


いかがでしょうか。

#過去ログの検索はしてみたつもりですが、既出でしたらすみません。


日立造船情報システム(株)システム開発部 基本システムグループ
岡留 淳一(Junichi OKADOME)