use Proc::Queue size=>2, qw(run_back); Proc::Queue::trace(1); my @ARGV = ("file1.fasta","file2.fasta"); for ( @ARGV ) { run_back { eval{ run_code($_) }; print STDERR $0."[$$]: $@\n" if $@; } } 1 while wait != -1; run_code { my $file = shift; #do the rest } #### Proc::Queue::run_back(CODE(0x824a9d0)) called at mycode_itr.pl line 37 Proc::Queue::fork called at mycode_itr.pl line 37 Proc::Queue::run_back(CODE(0x824a9d0)) called at mycode_itr.pl line 37 Proc::Queue::fork called at mycode_itr.pl line 37 Proc::Queue::wait called at mycode_itr.pl line 38