use Parallel::ForkManager; $threads=4; if($threads==1) { read_genome(); read_mapfile(); read_GTF(); read_RM(); } else { @eval_code=("read_genome();","read_mapfile();","read_GTF();","read_RM();"); my$pm=new Parallel::ForkManager($threads); foreach$eval_code(@eval_code) { $pm->start and next; eval$eval_code; $pm->finish; } $pm->wait_all_children; } sub read_genome { # do something } sub read_mapfile; { # do something } sub read_GTF { # do something } sub read_RM { # do something } # use data generated in the subroutines