POE is fantastic for doing these sort of things. It has a steep learning curve, however. I can recommend the chapter on POE in "Advanced Perl Programming" by Simon Cozens (O'Reilly). But once you got the hang of it, it's much easier to write parallel/long-running applications with it compared to
or threads.
POE by itself has no GUI, but you can replace its own main loop by the main loop of (G)Tk, for example.