We had a fun one once. A module defined an AUTOLOAD subroutine; the first it did was call a method named debug(), to report that AUTOLOAD had been called. Unfortunately, a code change left the debug() method undefined. So, AUTOLOAD was called to create it. Of course, the first thing AUTOLOAD did was to call debug(), which wasn't defined yet, so AUTOLOAD was called, which called debug(), which called AUTOLOAD, which... Until finally it bombed out from too many levels of subroutine calls. :D
Moral: If your AUTOLOAD sub is going to call other subroutines, make sure they've been defined!