This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #63558] Deparse open local(*FH) correctly
authorFather Chrysostomos <sprout@cpan.org>
Thu, 8 Dec 2011 17:58:44 +0000 (09:58 -0800)
committerFather Chrysostomos <sprout@cpan.org>
Thu, 8 Dec 2011 17:58:44 +0000 (09:58 -0800)
open FH and open local(*FH) compile down to the same structure
(open *FH), but with a flag set on the rv2gv (*{}) op for the
local case.

B::Deparse was special-casing rv2gv for ops with * in their prototype,
but without consideration for the flag.

dist/B-Deparse/Deparse.pm
dist/B-Deparse/t/deparse.t

index f394cb3..24b5606 100644 (file)
@@ -2371,7 +2371,7 @@ sub listop {
     my $proto = prototype("CORE::$name");
     if (defined $proto
        && $proto =~ /^;?\*/
-       && $kid->name eq "rv2gv") {
+       && $kid->name eq "rv2gv" && !($kid->private & OPpLVAL_INTRO)) {
        $first = $self->deparse($kid->first, 6);
     }
     else {
index a1d3317..52a20d9 100644 (file)
@@ -868,3 +868,6 @@ CORE::do({});
 () = (-r $_) + 3;
 () = (-w $_) + 3;
 () = (-x $_) + 3;
+####
+# [perl #63558] open local(*FH)
+open local *FH;