I am writing something like REPL in Ruby and I need to define vars on the run. I figured it out that I should use eval, but here is excerpt from irb session to test it. In 1.9.3 (That would work in 1.8)
> eval 'a = 3'
=> 3
> a
=> NameError: undefined local variable or method `a' for main:Object
They changed it in 1.9 to:
> eval 'a = 3'
=> 3
> eval 'a'
=> 3
So seems like changed it since 1.9. How can I define vars in 1.9.3 using eval (or something similar)?
IRB is lying to you. This as a script:
fails the same way under 1.8.7 and 1.9.3 for me.
Unfortunately the equivalent mentioned both by you and in that answer,
still doesn't work in 1.9 as a script, though it does work in 1.8.
This, however, works for me in both:
Using the same binding means variable assignments all happen in the same context. You won't be able to read them from the outside since locals are bound at compile-time, but if you're writing a REPL, "compile-time" is just "when I get another line and eval it" which is fine.