Rubyのevalの変数の扱い

Rubyでevalを使ったが、変数が定義されていないというエラーが出てはまった。
以下の文を実行すると、p aでエラーが出る。

eval <<EXEC
a = 1
EXEC

p a


これを実行する前には、aをevalの前で定義しておかないといけない。

a = 0

eval <<EXEC
a = 1
EXEC

p a

テーブルからRubyのプログラムを取りだして、動的に実行させようと思ったけれど、こういった変数定義がその場でできないのは、辛い。たぶんスコープとして捉えられているのだろう。

ところで、irbではキーから入力したものが動的に反映されていく。こちらでは変数定義も問題ない。
何かヒントがあるのではないか。