in reply to $@ can't be relied on?
I believe the cases where this might not work is for instance if something goes out of scope in the eval and a DESTROY is called - it could do something else that might change $@.