Call FETCH once on handle passed as 3rd arg to open()
When open() has three arguments and the second ends with & the third
argument is treated as a handle.
In some cases get-magic was being skipped; in others, it was being
called three times.
This commit fixes it by modifying sv_2io.
In 5.8.x (before commit
7a5fd60d4), sv_2io did not call get-magic at
all except when croaking ("Bad filehandle: %"SVf). In 5.10.0 (after
commit
7a5fd60d4), it started calling get-magic only if the sv was
neither a glob, a reference, or undef. So it has never been reliable
in its invocation of get-magic.
sv_2io now consistently skips get-magic on the sv passed in directly
to it (open(), the only caller in the core, has already called get-
magic before passing it in). It now calls get-magic on SvRV(sv) if
what is passed in is a reference, so open(fh, ">&", \$tied) will work.
Interestingly, open supports multiple levels of references:
\\\\\\\\\\\\open+f,">&",\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\\\\\\\\\\\*STDOUT;print{f}"Just another Perl hacker,\n",.\\\\\\\y\\\