use IPC::Run3; ... eval {run3 [ 'cmd', 'without subshell', 'and with any complex params 1<>2()[]{*}' ], 'and/now/I/can', 'redirect/child/streams', 'from/to/my/files' }; retcode_full_test_copypasted_from_perldoc_f_system; if ($@) { die("run3 failed but retcode_full_test passed: $@") } ...