#!/usr/bin/perl -w use strict; use Expect; $Expect::Multiline_Matching = 0; my @todo = ("ls /etc", "ps axw", "du"); my @cmds; foreach my $cmd (@todo) { print "spawning $cmd\n"; push @cmds, Expect->spawn($cmd); die "Didn't spawn $cmd\n" unless $cmds[-1]; } print "cmds = @cmds\nExpecting...\n"; while (@cmds) { expect( 1, '-i', \@cmds, [ qr"^.*\n", sub {print "\n", shift, " did something\n"; exp_continue;} ], [ 'eof', sub { my $done = shift; print "$done is finished\n"; @cmds = grep {$_ != $done} @cmds; print "cmds = @cmds\n"; } ], ); } print "Everything finished\n";