my %hash_1 = (); $hash_1{"michael"} = "michael"; $hash_1{"sasi"} = "other"; $hash_1{"wife"} = 0; my $thr = threads->create(\&hello,"michael",\%hash_1)->join; my $thr1 = threads->create(\&hello,"sasi",\%hash_1)->join; print " ".$hash_1{"wife"}."\n"; # will print '0' although it was manipulated in sub routine 'hello' sub hello{ my ($who,$hash) = @_; print "hello from thread: $who ".$hash->{$who}."\n"; if(defined($hash->{"wife"}) && !$hash->{"wife"}){ $hash->{"wife"} = "Deena"; print " ".$hash->{"wife"}."\n"; } }