Well think about it logically. $eval will evaluate to a certain specified level. You specified no level, which makes it evaluate to the default of 1.

With doing this, you end up with the variable names, not their value.

What does this mean?

It means you need to evaluate 1 level further, so you specify $eval(..,2)

Btw you are making this unnecessarily complex with the dynamic variables.