Deparse: handle \our @a
authorDavid Mitchell <davem@iabyn.com>
Tue, 20 Mar 2018 09:51:37 +0000 (09:51 +0000)
committerDavid Mitchell <davem@iabyn.com>
Tue, 20 Mar 2018 09:51:37 +0000 (09:51 +0000)
\our @a
was being deparsed as
\our(@a)

which incorrectly converts the \ from a scalar op to a list op

lib/B/Deparse.pm
lib/B/Deparse.t

index af64cd2..7fca688 100644 (file)
@@ -1575,7 +1575,7 @@ sub maybe_local {
            if $self->{'avoid_local'}{$$op};
        if ($need_parens) {
            return "$our_local($text)";
-       } elsif (want_scalar($op)) {
+       } elsif (want_scalar($op) || $our_local eq 'our') {
            return "$our_local $text";
        } else {
            return $self->maybe_parens_func("$our_local", $text, $cx, 16);
index 983956d..9c25007 100644 (file)
@@ -3039,3 +3039,8 @@ state @a :shared;
 state @b :shared = (1, 2);
 state %h :shared;
 state %i :shared = ('a', 1, 'b', 2);
+####
+# \our @a shouldn't be a list
+my $r = \our @a;
+my(@l) = \our((@b));
+@l = \our(@c, @d);