The thread inherits a COW (Copy on write) copy of a part of the array, so updates to that will not affect the original.
What you need to do is to RETURN a value from your "sub pinger". This value can be collected when the thread is join()ed.
Use the returned value (Which can be an array ref, in fact, you can return $task) to update the array.
FWIW, I find the code style you used frightening, but am resisting the urge to comment on that. Should you choose to approach that subject, please request comment. I'm sure monks would be more than happy to share coding tips.
"XML is like violence: if it doesn't solve your problem, use more."