avoid the use of `eval`