use IPC::Run qw/start/; my $h = start ['play','-q','/tmp/sound.wav']; { # block for local $SIG{INT} my $run=1; local $SIG{INT} = sub { print "caught SIGINT, stopping...\n"; $run=0; $h->signal('INT'); }; while ($run && $h->pumpable) { print "waiting...\n"; sleep 1; } } $h->finish; print "finished!\n";