$thr->join() only joins the thread for object $thr. In
your loop, $thr is assigned to the next thread with each
iteration.
If you don't need to know anything about the threads other
than to join them, you can simply your code to this:
threads->create(\&func, $var) foreach 1..10;
$_->join() foreach threads->list();
(Of course, there are other ways you could do this.)