Ruby の eval メソッドでローカル変数定義はできない

次のように #eval メソッドでローカル変数を定義した場合、外からは参照することができない。

eval "a = 42"

p a + a
# => error: undefined local variable or method `a' for main:Object (NameError)

これは expr 内のローカル変数の扱いがブロックと同じ為、外から参照する事ができないからです。
逆にいえば、すでに宣言されているローカル変数に対しての代入や expr 内での参照は行うことができます。

x = 0

# すでに宣言されているローカル変数に代入することはできる
eval "a = 42; x = a + a"

x
# => 84