my $abort = 0; MainLoop; sub startLoop { while (1) { sleep (2); print STDERR "startLoop: still sleeping\n"; $mw -> update(); last if $abort; } } sub interruptLoop { #something to interrupt startLoop and return to MainLoop? print STDERR "I've been pressed\n"; $abort = 1; }