If you were using something like POE::Component::Client::HTTP (see these recipes), I would recommend starting a polite number of parallel requests, perhaps 10 or 20, and then firing off a new request for each response that arrives. This is a handy way to limit parallelism without a lot of bookkeeping.
You may still be able to do this. It depends whether you can join() on "the next thread to finish". For every thread that joins, start another with the next request. Exit when you've run out of @addresses and @threads.