in reply to ignoring warnings in eval

Uh, why go through the trouble of re-opening STDERR (to /dev/null) and printing the error on STDERR? If you want nothing to show, then why not just do nothing?

Also note that your re-opening of STDERR isn't a local action. After the first warning that triggers the handler, no warning or error message will appear, unless STDERR is reopened again.

Of course, the reason you are seeing the unwanted warning is that you set up the handler afterwards. That's like putting on a bullet proof jacket after you've been shot dead.