use threads::shared; my $die : shared; #declare as shared before setting value $die = 0; while (<$out>) { return if $die; chomp; $err = 1 if (/^thread failed/); $Q->enqueue("$tid:$uut:$test:$_"); last if ($err); } while (1) { ....... ........ # put $die at an appropriate spot $die =1; ...... }