This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Deparse our(LIST) correctly
authorFather Chrysostomos <sprout@cpan.org>
Sat, 13 Sep 2014 06:33:57 +0000 (23:33 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 13 Sep 2014 06:33:57 +0000 (23:33 -0700)
It was coming out like this:

our($main::foo, $main::bar, $main::baz);

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

index 470c829..a9ddabd 100644 (file)
@@ -1195,8 +1195,7 @@ sub maybe_local {
     my $self = shift;
     my($op, $cx, $text) = @_;
     my $our_intro = ($op->name =~ /^(gv|rv2)[ash]v$/) ? OPpOUR_INTRO : 0;
     my $self = shift;
     my($op, $cx, $text) = @_;
     my $our_intro = ($op->name =~ /^(gv|rv2)[ash]v$/) ? OPpOUR_INTRO : 0;
-    if ($op->private & (OPpLVAL_INTRO|$our_intro)
-       and not $self->{'avoid_local'}{$$op}) {
+    if ($op->private & (OPpLVAL_INTRO|$our_intro)) {
        my $our_local = ($op->private & OPpLVAL_INTRO) ? "local" : "our";
        if( $our_local eq 'our' ) {
            if ( $text !~ /^\W(\w+::)*\w+\z/
        my $our_local = ($op->private & OPpLVAL_INTRO) ? "local" : "our";
        if( $our_local eq 'our' ) {
            if ( $text !~ /^\W(\w+::)*\w+\z/
@@ -1206,6 +1205,7 @@ sub maybe_local {
            }
            $text =~ s/(\w+::)+//;
        }
            }
            $text =~ s/(\w+::)+//;
        }
+       return $text if $self->{'avoid_local'}{$$op};
         if (want_scalar($op)) {
            return "$our_local $text";
        } else {
         if (want_scalar($op)) {
            return "$our_local $text";
        } else {
index c804b70..23465f0 100644 (file)
@@ -344,6 +344,9 @@ print $main::x[1];
 my %x;
 $x{warn()};
 ####
 my %x;
 $x{warn()};
 ####
+# our (LIST)
+our($foo, $bar, $baz);
+####
 # <>
 my $foo;
 $_ .= <ARGV> . <$foo>;
 # <>
 my $foo;
 $_ .= <ARGV> . <$foo>;