I managed to get it to do what I wanted it to do without a GUI -- do_one_loop() doesn't do what I thought it did. It simply checks for waiting events and messages and acts accordingly. I took your advice and made a thread that sits and waits to send a message when activated by a shared variable. That did the trick.
This should help me translate it into a GUI -- I'll look at the DoOneEvent function too, and see if I can do something with that.
Thanks
much for your help and your patience with a perl newbie.