#!/usr/bin/env ruby
foo = Hash.new
bar = "foo"
instance_eval(bar)["key"]="value"
В этом контексте eval(bar)
также работает
instance_eval пытается выполнить (как код ruby) строку, которую вы передаете в качестве первого аргумента в текущем контексте.
В вашем примере Ruby пытается вызвать метод String # [] =. И ты не хочешь этого:)
Надеюсь, это поможет.