in reply to creating a state machine

You might check out Net::Cmd. It handles most of the details of an "SMTP like" protocol.

Other modules, like Net::SMTP, Net::SNPP, and Net::FTP derive from it.

Those are all, of course, client oriented modules, so none it really helps with your state-machine, but it would help with the line-oriented protocol.

If POE isn't your cup of tea, you might like Net::Server. Similarly named, but unrelated is NetServer::SMTP which shows how to use Net::Cmd within a state-machine type server.