summaryrefslogtreecommitdiff
path: root/dist
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2011-12-08 13:16:48 -0800
committerFather Chrysostomos <sprout@cpan.org>2011-12-08 13:51:20 -0800
commit843b15cc12d1b7f15c7624a8f097be474339d5a8 (patch)
treeb50469f777604813e40793748dde672a34dea316 /dist
parent240d1b6fec0bdaf633ffc53476ade6401c251270 (diff)
downloadperl-843b15cc12d1b7f15c7624a8f097be474339d5a8.tar.gz
[perl #74740] Deparse -(f()) correctly
-(f()) was being deparsed as -f(), which is a filetest operator. Extra parens are needed for negation if the child op deparses with a single letter at the beginning.
Diffstat (limited to 'dist')
-rw-r--r--dist/B-Deparse/Deparse.pm8
-rw-r--r--dist/B-Deparse/t/deparse.t3
2 files changed, 10 insertions, 1 deletions
diff --git a/dist/B-Deparse/Deparse.pm b/dist/B-Deparse/Deparse.pm
index 821cce146f..10ab49810c 100644
--- a/dist/B-Deparse/Deparse.pm
+++ b/dist/B-Deparse/Deparse.pm
@@ -1629,7 +1629,13 @@ sub pfixop {
my($op, $cx, $name, $prec, $flags) = (@_, 0);
my $kid = $op->first;
$kid = $self->deparse($kid, $prec);
- return $self->maybe_parens(($flags & POSTFIX) ? "$kid$name" : "$name$kid",
+ return $self->maybe_parens(($flags & POSTFIX)
+ ? "$kid$name"
+ # avoid confusion with filetests
+ : $name eq '-'
+ && $kid =~ /^[a-zA-Z](?!\w)/
+ ? "$name($kid)"
+ : "$name$kid",
$cx, $prec);
}
diff --git a/dist/B-Deparse/t/deparse.t b/dist/B-Deparse/t/deparse.t
index 8f2a4b80b0..d71eeaafac 100644
--- a/dist/B-Deparse/t/deparse.t
+++ b/dist/B-Deparse/t/deparse.t
@@ -878,3 +878,6 @@ CORE::do({});
# [perl #63558] open local(*FH)
open local *FH;
pipe local *FH, local *FH;
+####
+# [perl #74740] -(f()) vs -f()
+$_ = -(f());