On Tue, 24 May 2005, Han Holl wrote: > Hello, > > As recommended in the pickaxe I often have a section at the end of a > rb file with > if __FILE__ =3D=3D $0 > ... > end > > However, if one of the included files includes this file itself (not > unlikely at all), the code gets executed twice. > Is there a reasonable workaround for this ? i have code generators for 'serious' lib files that do this: unless defined? $__foo_bar__ module Foo #--{{{ Foo::LIBDIR = File::dirname(File::expand_path(__FILE__)) + File::SEPARATOR unless defined? Foo::LIBDIR class Bar #--{{{ #--}}} end # class Bar #--}}} end # module Foo $__foo_bar__ = __FILE__ end it's the 'unless defined?' bit that's imortant here, so something like: unless defined? $__foo_main__ module Foo class Main end end Foo::Main::new(ARGV).run if $0 == __FILE__ $__foo_main__ = __FILE__ end will do the trick. the reason it happens is that require 'a.rb' # loads file and require './a.rb' # loads file because require doesn't do a File::expand_path on loaded features. imho it's a bug and require should actually hash the stat of the file to see if it's loaded but that explodes on nfs sometimes... at least expanding the path would help though. cheers. -a -- =============================================================================== | email :: ara [dot] t [dot] howard [at] noaa [dot] gov | phone :: 303.497.6469 | My religion is very simple. My religion is kindness. | --Tenzin Gyatso ===============================================================================