my $outputSem :shared; ... if ($success) { lock $outputSem; erase($input_window); addstr($input_window, $buffer); refresh($input_window); $ptr = length($buffer); curs_to_ptr($input_window, $ptr); } ... sub icb_print { my ($window, $color, $fmt, @args) = @_; my $buf = sprintf ($fmt, @args); lock $outputSem; ... }