わたなべです。 tamra / mail.goo.ne.jp <tamra / mail.goo.ne.jp> writes: :require 'foo' の検索順番が、 :以前:foo.rb -> foo.so :だったのが、 :現在:foo.so -> foo.rb :にセキュリティ対策のため変更になったということですね。 以前は catch(:break) do %w(foo.rb foo.so).each do |foo| $:.each do |path| throw(:break) if "#{path}/#{foo}" end end end という感じだったのが catch(:break) do $:.each do |path| %w(foo.rb foo.so).each do |foo| throw(:break) if "#{path}/#{foo}" end end end となったわけです。だからたとえば /usr/local/lib/ruby/site_ruby/1.6/foo.rb /usr/local/lib/ruby/site_ruby/1.6/foo.so ならfoo.rbが読まれますが、 /usr/local/lib/ruby/site_ruby/1.6/foo.rb /usr/local/lib/ruby/site_ruby/1.6/i386-cygwin/foo.so だとfoo.soのほうが先になるのでこっちが優先になります。 % ruby -e 'puts $:' /usr/local/lib/ruby/site_ruby/1.6/i386-cygwin /usr/local/lib/ruby/site_ruby/1.6 /usr/local/lib/ruby/site_ruby /usr/local/lib/ruby/1.6/i386-cygwin /usr/local/lib/ruby/1.6 . MS-DOSの*.com,*.exe,*.batとPATHの関係と同じと考えればいいかな。 -- わたなべひろふみ