From: "Mauricio Fernández" Date: 2005-09-16T22:52:43+09:00 Subject: Re: bug in require? On Fri, Sep 16, 2005 at 12:18:33PM +0900, Ara.T.Howard wrote: > [ahoward@localhost ~]$ strace ruby -e' 4.times{ require "digest/md5.so" === [...] > [ahoward@localhost ~]$ cat a.rb > 4.times{ require 'digest/md5' } === > why the difference? batsman@tux-chan:/tmp$ strace ruby -e' 4.times{ require "digest/md5.so" }' 2>&1 |grep open|grep md5 open("/home/batsman/usr//lib/ruby/1.8/i686-linux/digest/md5.so", O_RDONLY|O_LARGEFILE) = 3 open("/home/batsman/usr//lib/ruby/1.8/i686-linux/digest/md5.so", O_RDONLY) = 3 batsman@tux-chan:/tmp$ strace ruby -e' 4.times{ require "digest/md5" }' 2>&1 |grep open|grep md5 open("/home/batsman/usr//lib/ruby/1.8/i686-linux/digest/md5.so", O_RDONLY|O_LARGEFILE) = 3 open("/home/batsman/usr//lib/ruby/1.8/i686-linux/digest/md5.so", O_RDONLY|O_LARGEFILE) = 3 open("/home/batsman/usr//lib/ruby/1.8/i686-linux/digest/md5.so", O_RDONLY) = 3 open("/home/batsman/usr//lib/ruby/1.8/i686-linux/digest/md5.so", O_RDONLY|O_LARGEFILE) = 3 open("/home/batsman/usr//lib/ruby/1.8/i686-linux/digest/md5.so", O_RDONLY|O_LARGEFILE) = 3 open("/home/batsman/usr//lib/ruby/1.8/i686-linux/digest/md5.so", O_RDONLY|O_LARGEFILE) = 3 If no extension is given, ruby verifies if any new 'feature' can be loaded: batsman@tux-chan:/tmp$ strace ruby -rfileutils -e'require "digest/md5"; FileUtils.mkdir("digest"); File.open("digest/md5.rb","w"){|f| f.puts %{puts "==== opened & loaded md5.rb"} }; $:.unshift "."; require "digest/md5" ' 2>&1 |grep open|grep md5 execve("/home/batsman/usr/bin/ruby", ["ruby", "-rfileutils", "-erequire \"digest/md5\"; FileUtils.mkdir(\"digest\"); File.open(\"digest/md5.rb\",\"w\"){|f| f.puts %{puts \"==== opened & loaded md5.rb\"} }; $:.unshift \".\"; require \"digest/md5\" "], [/* 31 vars */]) = 0 open("/home/batsman/usr//lib/ruby/1.8/i686-linux/digest/md5.so", O_RDONLY|O_LARGEFILE) = 3 open("/home/batsman/usr//lib/ruby/1.8/i686-linux/digest/md5.so", O_RDONLY|O_LARGEFILE) = 3 open("/home/batsman/usr//lib/ruby/1.8/i686-linux/digest/md5.so", O_RDONLY) = 3 open("digest/md5.rb", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3 write(3, "puts \"==== opened & loaded md5.r"..., 35) = 35 open("./digest/md5.rb", O_RDONLY|O_LARGEFILE) = 3 open("./digest/md5.rb", O_RDONLY|O_LARGEFILE) = 3 open("./digest/md5.rb", O_RDONLY|O_LARGEFILE) = 3 open("./digest/md5.rb", O_RDONLY|O_LARGEFILE) = 3 open("./digest/md5.rb", O_RDONLY|O_LARGEFILE) = 3 read(3, "puts \"==== opened & loaded md5.r"..., 4096) = 35 write(1, "==== opened & loaded md5.rb\n", 28==== opened & loaded md5.rb -- Mauricio Fernandez