This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fix deparsing of glob(my $x) and CORE::glob
[perl5.git] / lib / B / Deparse.pm
index 5ea01cb..3800171 100644 (file)
@@ -1811,7 +1811,6 @@ my %feature_keywords = (
 # keywords that are strong and also have a prototype
 #
 my %strong_proto_keywords = map { $_ => 1 } qw(
 # keywords that are strong and also have a prototype
 #
 my %strong_proto_keywords = map { $_ => 1 } qw(
-    glob
     pos
     prototype
     scalar
     pos
     prototype
     scalar
@@ -2810,13 +2809,19 @@ sub pp_syscall { listop(@_, "syscall") }
 sub pp_glob {
     my $self = shift;
     my($op, $cx) = @_;
 sub pp_glob {
     my $self = shift;
     my($op, $cx) = @_;
-    my $text = $self->dq($op->first->sibling);  # skip pushmark
+    my $kid = $op->first->sibling;  # skip pushmark
     my $keyword =
        $op->flags & OPf_SPECIAL ? 'glob' : $self->keyword('glob');
     my $keyword =
        $op->flags & OPf_SPECIAL ? 'glob' : $self->keyword('glob');
-    if ($text =~ /^\$?(\w|::|\`)+$/ # could look like a readline
-       or $keyword =~ /^CORE::/
+    my $text;
+    if ($keyword =~ /^CORE::/
+       or $kid->name ne 'const'
+       or ($text = $self->dq($kid))
+            =~ /^\$?(\w|::|\`)+$/ # could look like a readline
         or $text =~ /[<>]/) {
         or $text =~ /[<>]/) {
-       return "$keyword(" . single_delim('qq', '"', $text) . ')';
+       $text = $self->deparse($kid);
+       return $cx >= 5 || $self->{'parens'}
+           ? "$keyword($text)"
+           : "$keyword $text";
     } else {
        return '<' . $text . '>';
     }
     } else {
        return '<' . $text . '>';
     }