use strict; use warnings; use 5.010; use threads; use threads::shared; my $flag = 0; share($flag); say "\$flag in main() is: $flag"; $SIG{'HUP'} = sub { $flag = !$flag; say "signal caught, \$flag in main() changed to: $flag"; }; sub thr_func { for (1 .. 5) { sleep 1; say "\$flag in thread is: $flag"; } } my $thr = threads->create('thr_func')->detach(); sleep 3; #allow time for thread to be created and start running kill('HUP', $$); #send signal to main() sleep 10; --output:-- $flag in main() is: 0 $flag in thread is: 0 signal caught, $flag in main() changed to: 1 $flag in thread is: 0 $flag in thread is: 1 $flag in thread is: 1 $flag in thread is: 1