in reply to eval with semicolon

You don't. Well, not any more than you need it after, say, $x++.

eval is not a flow-control construct (like "if" or "unless" or "foreach", etc.), but a function. A function that takes a block. Like any function that takes parameters, you must separate it from the next command with a semicolon. If it's the last statement in a block, perl makes that semicolon optional.