only backup STDOUT/STDERR if redirected
use parens
can't use non-string variables in 3-argument open due to FCGI

(I think) FCGI ties STDERR, STDOUT, and STDIN which overrides open
calls.  In the case of a 3-argument open it does:

    eval("$rc = open($_[0], $_[1], $_[2])");

Which means that the variables can't be "the normal 'reference to a
glob'" as is supposed to be the case.
fixes RT #98012, shellcmd STDERR/STDOUT FCGI bug