use Time::HiRes qw( sleep ); sub wait_threads { for (;;) { my @joinable = threads->list(threads::joinable); if (@joinable) { return shift(@joinable)->join(); } sleep(0.010); } }