I think that perl threading works better than its reputation - the main drawback is that you can not share references/objects.
If you start to use threads, than I would suggest you to work with the Thread::Queue for anything which is more complex for synchronisation - consider to work with polling in the beginning.
Threading will become only complex if you need to display the results in the TK window.