From 843b15cc12d1b7f15c7624a8f097be474339d5a8 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Thu, 8 Dec 2011 13:16:48 -0800 Subject: [PATCH] [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. --- dist/B-Deparse/Deparse.pm | 8 +++++++- dist/B-Deparse/t/deparse.t | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/dist/B-Deparse/Deparse.pm b/dist/B-Deparse/Deparse.pm index 821cce1..10ab498 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 8f2a4b8..d71eeaa 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()); -- 2.7.4