いまいです。

Dir[] に **/ を渡して再帰的なパターンマッチをさせた結果返ってくるパスっ
て、順序は特に決まっていないという認識であってるでしょうか?

/tmp/foo と /tmp/bar は同じ構成なのですが、

$ ./miniruby -ve'puts Dir["/tmp/{foo,bar}/app/controllers/**/*_controller.rb"]'
ruby 1.9.0 (2008-08-29 revision 18923) [i686-linux]
/tmp/foo/app/controllers/m_controller.rb
/tmp/foo/app/controllers/m/c_controller.rb
/tmp/bar/app/controllers/m/c_controller.rb
/tmp/bar/app/controllers/m_controller.rb

$ ./miniruby -ve'
%w(/tmp/foo /tmp/bar).each{|d|
Dir.chdir(d){puts Dir["app/controllers/**/*_controller.rb"]}}'
ruby 1.9.0 (2008-08-29 revision 18923) [i686-linux]
app/controllers/m_controller.rb
app/controllers/m/c_controller.rb
app/controllers/m/c_controller.rb
app/controllers/m_controller.rb

という挙動です。

zsh だと、どちらもパス名の順序で返ってくるようです。

% ls -1 /tmp/{foo,bar}/app/controllers/**/*_controller.rb 
/tmp/bar/app/controllers/m/c_controller.rb
/tmp/bar/app/controllers/m_controller.rb
/tmp/foo/app/controllers/m/c_controller.rb
/tmp/foo/app/controllers/m_controller.rb
% for d in /tmp/foo /tmp/bar; do (cd ${d} && ls -1 app/controllers/**/*_controller.rb); done
app/controllers/m/c_controller.rb
app/controllers/m_controller.rb
app/controllers/m/c_controller.rb
app/controllers/m_controller.rb

別のマシンだとどちらも zsh と同じ順序で返ってくるので、順序は不定なの
かなと思いますが、どなたか真相を教えていただけないでしょうか?
--
Nobuhiro IMAI <nov / yo.rim.or.jp>
Key fingerprint = F39E D552 545D 7C64 D690  F644 5A15 746C BD8E 7106