use strict; use warnings; use IPC::Open3; &run; sub run { while ( 1 ) { eval { &_run }; print $@ if $@; sleep 10; } } sub _run { my ($wtr, $rdr, $err); my (@output, $pid); eval { $pid = IPC::Open3::open3($wtr, $rdr, $err, 'blubb'); while (my $line = <$rdr>) { chomp($line); push @output, "out: $line"; } close($wtr) if $wtr; close($rdr) if $rdr; close($err) if $err; waitpid $pid, 0; }; print "$_\n" for @output; } #### use strict; use warnings; use IPC::Cmd; &run; sub run { while ( 1 ) { eval { &_run_cmd }; print $@ if $@; sleep 10; } } sub _run_cmd { my( $success, $error_code, $full_buf, $stdout_buf, $stderr_buf ) = IPC::Cmd::run( command => 'blubb', verbose => 0 ); print $success, "\n"; }