This has been noted by others. The following was added to the most recent version of the threads POD:
=item Memory consumption
On most systems, frequent and continual creation and destruction of threads can lead to ever-increasing growth in the memory footprint of the Perl interpreter. While it is simple to just launch threads and then ->join() or ->detach() them, for long-lived applications, it is better to maintain a pool of threads, and to reuse them for the work needed, using queues (see Thread::Queue) to notify threads of pending work. The CPAN distribution of this module contains a simple example (examples/pool_reuse.pl) illustrating the creation, use and monitoring of a pool of reusable threads.
I also see you're putting undue emphasis on the 'thread variable'. Assigning a thread to a variable looks to be unnecessary in your case. Just use: