This started as a question in ruby-talk. It's about this line of code:
eval(IO.read(init_path), binding, init_path)
This idiom appears in initializer.rb, in v1.2.3, for loading
environment files and plugin init files. (On Edge, the plugin stuff is
moved to another file, but the same idiom's still used in that file,
and you'll see it used for the env files in initializer.rb on Edge as
The question was, why use this idiom instead of load or require?
My assumption is that the answer is this idiom gives you flexible
bindings, but if anyone could verify that, or correct me, I'd totally
appreciate it. I don't actually see the binding passed being declared
anywhere, so it kind of puzzles me.