use strict; use warnings; use IPC::Open3; my ($msg_out,$err_out); eval { open3(undef, *OUT, *ERR, @ARGV) }; if ($@) { $msg_out = ''; $err_out = "invalid command '$ARGV[0]'"; } else { $msg_out = do {local $/;}; $err_out = do {local $/;}; } print "STDOUT: $msg_out\n"; print "STDERR: $err_out\n";