This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Deparse our(LIST) correctly
[perl5.git] / lib / B / Deparse.pm
index 8ad68ed..a9ddabd 100644 (file)
@@ -20,7 +20,7 @@ use B qw(class main_root main_start main_cv svref_2object opnumber perlstring
          CVf_METHOD CVf_LVALUE
         PMf_KEEP PMf_GLOBAL PMf_CONTINUE PMf_EVAL PMf_ONCE
         PMf_MULTILINE PMf_SINGLELINE PMf_FOLD PMf_EXTENDED);
-$VERSION = '1.26';
+$VERSION = '1.27';
 use strict;
 use vars qw/$AUTOLOAD/;
 use warnings ();
@@ -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;
-    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/
@@ -1206,6 +1205,7 @@ sub maybe_local {
            }
            $text =~ s/(\w+::)+//;
        }
+       return $text if $self->{'avoid_local'}{$$op};
         if (want_scalar($op)) {
            return "$our_local $text";
        } else {
@@ -3332,7 +3332,9 @@ sub pp_aelemfast_lex {
     my($op, $cx) = @_;
     my $name = $self->padname($op->targ);
     $name =~ s/^@/\$/;
-    return $name . "[" .  ($op->private + $self->{'arybase'}) . "]";
+    my $i = $op->private;
+    $i -= 256 if $i > 127;
+    return $name . "[" .  ($i + $self->{'arybase'}) . "]";
 }
 
 sub pp_aelemfast {
@@ -3344,7 +3346,9 @@ sub pp_aelemfast {
     my $gv = $self->gv_or_padgv($op);
     my($name,$quoted) = $self->stash_variable_name('@',$gv);
     $name = $quoted ? "$name->" : '$' . $name;
-    return $name . "[" .  ($op->private + $self->{'arybase'}) . "]";
+    my $i = $op->private;
+    $i -= 256 if $i > 127;
+    return $name . "[" .  ($i + $self->{'arybase'}) . "]";
 }
 
 sub rv2x {
@@ -4785,7 +4789,7 @@ sub matchop {
     $flags = $matchwords{$flags} if $matchwords{$flags};
     if ($pmflags & PMf_ONCE) { # only one kind of delimiter works here
        $re =~ s/\?/\\?/g;
-       $re = "?$re?";
+       $re = "m?$re?";        # explicit 'm' is required
     } elsif ($quote) {
        $re = single_delim($name, $delim, $re);
     }
@@ -5332,7 +5336,7 @@ parameter twice:
        warnings => [FATAL => qw/void io/],
     );
 
-See L<perllexwarn> for more information about lexical warnings.
+See L<warnings> for more information about lexical warnings.
 
 =item hint_bits