in reply to why does Perl eval have a strange terminator?

From perlsyn:

Simple Statements The only kind of simple statement is an expression evaluated for its s +ide-effects. Every simple statement must be terminated with a semicol +on, unless it is the final statement in a block, in which case the se +micolon is optional. But put the semicolon in anyway if the block tak +es up more than one line, because you may eventually add another line +. Note that there are operators like eval {}, sub {}, and do {} that +look like compound statements, but aren't--they're just TERMs in an e +xpression--and thus need an explicit termination when used as the las +t item in a statement.

So, eval requires the terminating semicolon because it's a simple statement. You're using it for its side effects.

sub, when used in an expression, requires the semicolon as well (eg. my $coderef = sub {...};).