use strict; use warnings; my @array1 = funct_array($par1,$par2,$filename); my %hash1 = funct_hash($par1,$par2,$par3,$filename); # there are more tables/lists like this # then followed process that # takes the pre-generated value from @array1 and %hash1. # Thus both @array1 and %hash1 must be completed first. # Subroutine list sub funct_array { my ($p1,$p2,$fn) = @_; my @array_result; # Run some time consuming process return @array_resutlt; } sub funct_hash{ my ($p1,$p2,$fn) = @_; my %hash_result; # Run some time consuming process return %hash_resutlt; } #### use strict; use warnings; use threads; use Data::Dumper; my $array1 = threads->new(\&funct_array,($par1,$par2,$filename)); my $hash1 = threads->new(\&funct_hash,($par1,$par2,$par3,$filename)); # Then I tried to see the content of the array # with Data Dumper print Dumper $array->join; print Dumper $hash1->join; # But I couldn't see any value of @array1 and # %hash1 that I can use for the later process # Subroutine list sub funct_array { my ($p1,$p2,$fn) = @_; my @array_result; # Run some time consuming process return @array_resutlt; } sub funct_hash{ my ($p1,$p2,$fn) = @_; my %hash_result; # Run some time consuming process return \%hash_resutlt; }