avoid to use eval()