If you print $a in first version, it says a, b, {perl => monk }. If you eval it, it is interpreted as a perl program.
In a perl program with strict in effect, a, b and monk are forbidden. The eval doesn't care how you constructed the string, it just works with what it sees.
Comment on Re: How to make array references from scalar value