This is what my solution does:

---
~$ ruby modwhich.rb date set bigdecimal
require "date" => /usr/lib/ruby/1.8/date.rb
require "set" => /usr/lib/ruby/1.8/set.rb
require "bigdecimal" => /usr/lib/ruby/1.8/i486-linux/bigdecimal.so
~$ ruby modwhich.rb /usr/lib/ruby/1.8/date
require "/usr/lib/ruby/1.8/date" => /usr/lib/ruby/1.8/date.rb
~$ cat modwhich_test.rb
require 'date'
require 'set'
require 'bigdecimal'
~$ ruby -rmodwhich modwhich_test.rb
require "date" => /usr/lib/ruby/1.8/date.rb
require "set" => /usr/lib/ruby/1.8/set.rb
require "bigdecimal" => /usr/lib/ruby/1.8/i486-linux/bigdecimal.so
~$ MODWHICH_VERBOSE=1 ruby -rmodwhich modwhich_test.rb
(modwhich_test.rb:1) require "date" => /usr/lib/ruby/1.8/date.rb
(/usr/lib/ruby/1.8/date.rb:196) require "rational" => 
/usr/lib/ruby/1.8/rational.rb
(/usr/lib/ruby/1.8/date.rb:197) require "date/format" => 
/usr/lib/ruby/1.8/date/format.rb
(/usr/lib/ruby/1.8/date/format.rb:4) require "rational" => 
/usr/lib/ruby/1.8/rational.rb
(modwhich_test.rb:2) require "set" => /usr/lib/ruby/1.8/set.rb
(modwhich_test.rb:3) require "bigdecimal" => 
/usr/lib/ruby/1.8/i486-linux/bigdecimal.so
---

In code it looks like this:

---
require 'pathname'

module ModWhich
  SUFFIXES = [''] + %w{ .rb .rbw .o .so .bundle .dll .sl .jar }

  def self.which(mod)
    if Pathname.new(mod).absolute?
      paths = File.dirname(mod).to_a
      mod = File.basename(mod)
    else
      paths = $LOAD_PATH
    end

    file_names = SUFFIXES.map { |suff| mod + suff }

    paths.each do |path|
      file_names.each do |file|
        full_path = File.expand_path(File.join(path, file))
        return full_path if File.file?(full_path)
      end
    end

    nil
  end

  def self.report(mod)
    puts "require %s => %s" % [mod.inspect, which(mod) || "(no such 
file)"]
  end

  def self.verbose?
    ENV['MODWHICH_VERBOSE']
  end

  def self.trap_require
    Kernel.module_eval do
      alias :modwhich_original_require :require

      def require(arg)
        if ModWhich::verbose? || caller.first.split(':')[0] == $0
          if ModWhich::verbose?
            print "(#{caller.first}) "
          end
          ModWhich::report(arg)
        end
        modwhich_original_require(arg)
      end
    end
  end
end

if __FILE__ == $0
  while mod = ARGV.shift
    ModWhich::report(mod)
  end
else
  ModWhich::trap_require
end
---

As a pastie: http://pastie.org/264164

I think I'm gonna keep that around, looks useful to me.

Regards,
Matthias
-- 
Posted via http://www.ruby-forum.com/.