And my OTHER STUPID MISTAKE was trying to debug in ptkdb, the TK debugger. It can be done but you have to set stuff up to handle the debugger mainloop AND the program mainloop and I completely forgot about that.
Oops, it was a typo, as I tried to setup the sample script. In your case, since the main script was not a Tk app itself, it wasn't needed. The important line in the example is CORE::exit, as explained in the Caveat to perldoc Tk::exit
I updated the example a bit, to show that if you are forking from an existing Tk GUI, the forks must be done first. Otherwise Tk just hangs.