my $semErr :shared; sub twarn { lock $semErr; my $tid = thread->tid; warn sprintf("[%3d]", $tid), @_; } ... twarn "Something happened\n";