Integrate changes #9544,9547,9549(perlio),9550,9551 from
[p5sagit/p5-mst-13.2.git] / ext / B / B / Deparse.pm
index b0a5eae..eb8eb60 100644 (file)
@@ -573,7 +573,11 @@ sub maybe_local {
     my $self = shift;
     my($op, $cx, $text) = @_;
     if ($op->private & OPpLVAL_INTRO and not $self->{'avoid_local'}{$$op}) {
-       return $self->maybe_parens_func("local", $text, $cx, 16);
+        if (want_scalar($op)) {
+           return "local $text";
+       } else {
+           return $self->maybe_parens_func("local", $text, $cx, 16);
+       }
     } else {
        return $text;
     }
@@ -601,7 +605,11 @@ sub maybe_my {
     my $self = shift;
     my($op, $cx, $text) = @_;
     if ($op->private & OPpLVAL_INTRO and not $self->{'avoid_local'}{$$op}) {
-       return $self->maybe_parens_func("my", $text, $cx, 16);
+       if (want_scalar($op)) {
+           return "my $text";
+       } else {
+           return $self->maybe_parens_func("my", $text, $cx, 16);
+       }
     } else {
        return $text;
     }
@@ -774,8 +782,9 @@ sub gv_name {
     } else {
        $stash = $stash . "::";
     }
-    if ($name =~ /^([\cA-\cZ])$/) {
-       $name = "^" . chr(64 + ord($1));
+    if ($name =~ /^([\cA-\cZ])(.*)$/) {
+       $name = "^" . chr(64 + ord($1)) . $2;
+       $name = "{$name}" if length($2);        # ${^WARNING_BITS} etc
     }
     return $stash . $name;
 }
@@ -2408,7 +2417,9 @@ sub pp_const {
 #      return $self->const_sv($op)->PV;
 #    }
     my $sv = $self->const_sv($op);
-    return const($sv);
+#    return const($sv);
+    my $c = const $sv; 
+    return $c =~ /^-\d/ ? $self->maybe_parens($c, $cx, 21) : $c;
 }
 
 sub dq {