in reply to Do I need threading for my GUI?

Perl threading is not exactly without its bugs and caveats. The simplest solution is probably to split the main process up in short bits that schedule the next bit via Tk::after.

For instance:

my @long_list_of_items; # do not call this directly sub main_process { if (@long_list_of_items) { process_item(shift @long_list_of_items); $button->after(50,\&main_process); } } # call this to add items to the list sub add_item { my $schedule = !@long_list_of_items; push @long_list_of_items,@_; if ($schedule) { $button->after(50,\&main_process); } }
Update: slight optimization of scheduling.