diff options
author | Father Chrysostomos <sprout@cpan.org> | 2011-12-08 13:16:48 -0800 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2011-12-08 13:51:20 -0800 |
commit | 843b15cc12d1b7f15c7624a8f097be474339d5a8 (patch) | |
tree | b50469f777604813e40793748dde672a34dea316 /dist | |
parent | 240d1b6fec0bdaf633ffc53476ade6401c251270 (diff) | |
download | perl-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.pm | 8 | ||||
-rw-r--r-- | dist/B-Deparse/t/deparse.t | 3 |
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()); |