#!/usr/bin/perl use warnings; use strict; my %pids; my @to_be_processed = (1..20); my $cmd = 'echo'; foreach my $p (@to_be_processed){ $pids{$p}{'pid'} = open($pids{$p}{'fh'}, "$cmd $p 2>&1 |"); } # get output dosn't work? get globs foreach my $key(keys %pids){ while (<{ $pids{$key}{'fh'} }>){print $_} } foreach my $key(keys %pids){ waitpid($pids{$key}, 1); } print "done\n";