Welcome to dynamic languages!
You can't get compile-time checking of method calls (I'm assuming you're using good OO style). After all, you can define and undefine subroutines at runtime, and there's no easy way to do static analysis to find out what class an object is when you do the call.
However, one (partial) solution is to make sure that your test cases (you do have test cases for all your code, right?) have full coverage. Run your tests with -d:Coverage or my Quick Perl coverage analyzer and make sure that every method call is being invoked. The reason that this is "partial" is that you could have objects that are a different class at some later time, but this is relatively uncommon.