It seems that kyle understood what you meant, so I'm sure that I must be missing something, but—what does it mean to not be ‘usable’? I tried running your snippet and, once I defined sub _get_package_name { return $_[0] }, it didn't complain for me. Do you get a complaint, or is it only later that anything bad happens?
UPDATE: Whoops, I didn't use English;, so that $EVAL_ERROR was false while $@ was not.