If your server is non-forking, you should be able just call exit to stop the server. That will do the same thing as the kill line.
in reply to Re^6: Stopping an HTTP::Server::Simple server
in thread Stopping an HTTP::Server::Simple server
If the server is forking under the hood, then in handling a web request you are just killing the child process that is handling that request and another will be spawned shortly. In that case you would need to kill some set of processes to shut it down. What set depends on how it is set up. For instance if it forks for every request received, then killing your parent process (which getppid should give you) will do it. If it preforks and has a pool of processes, then you need to kill them all. Typically you can do that by sending the right signal to the parent process.
Given your described behavior, it sounds like it may be forking. (That, or kill -9 is failing somehow.)