This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Make open(... "<&", $fileno) respect magic
authorFather Chrysostomos <sprout@cpan.org>
Fri, 25 May 2012 06:13:37 +0000 (23:13 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Thu, 7 Jun 2012 15:18:52 +0000 (08:18 -0700)
commitf90b723246c15bceccd726b73c412184c27eca7d
tree232ebb7140be05ec5b66e575c6975dd6e5341ed2
parent1e00d6e92a9b49086ba010b4c50b9362ce8f2caa
Make open(... "<&", $fileno) respect magic

A magical variable is never SvPOK, but only SvPOKp.  The code for
checking whether a duplicatee is a numeric file descriptor was only
checking SvPOK.  So a regular variable containing a fileno-as-a-string
would work, such as the $a below, as would a stringified magical vari-
able ("$1"), but not $1 itself.

$ echo foo | perl -le '$a = "0"; open a, "<&", $a; warn <a>'
foo
$ echo foo | perl -le '"0" =~ /(.)/; open a, "<&", $1; warn <a>'
Can't use an undefined value as filehandle reference at -e line 1.
$ echo foo | perl -le '"0" =~ /(.)/; open a, "<&", "$1"; warn <a>'
foo

SvPOK variables are also SvPOKp, so checking only the latter suffices.
doio.c
t/io/open.t