Try looking at
IO::Select. What you need to do is create an IO::Select object, add your server and each new client to it, and call can_read() in your main while loop, which returns all handles which are currently readable/contain new data. You can then check if it's a client or server handle, and act accordingly.
There's an example in the IO::Select docs, if you need help with it, just ask.
C.