Seems like eval() works fine for you, but, if you simply want to check for a sub's existence without having to perform a call on it, just use
defined() (or the implied defined):
You may also use defined(&func) to check whether subroutine &func has ever been defined. The return value is unaffected by any forward declarations of &foo. Note that a subroutine which is not defined may still be callable: its package may have an AUTOLOAD method that makes it spring into existence the first time that it is called -- see perlsub.
-fp