That's a block eval, not a string eval. Block evals are the equivalent of a catch block in Java or the like, so this is perfectly safe (modulo correct exception checking and such, of course..
Although this isn't exactly a case of great eval use – the exceptions are effectively swallowed after printing (at least use warn?), and the $@ isn't being properly localized