use threads; my @arr = (1,2,3,4); my $outnumber=1; print "\n variable outside thread that is in main program $outnumber\n"; my @threads; foreach (@arr) { push @threads, threads->new(\&doSomething, $_, $outnumber); } foreach (@threads) { $_->join(); } sub doSomething () { my ($thread)=@_; lock $outnumber; my $intervariable=$outnumber; print "\n Before increment is $intervariable\n"; ++$intervariable; print "\n After increment is $intervariable\n"; print "thread $thread\n"; }