diff options
author | Father Chrysostomos <sprout@cpan.org> | 2014-12-13 19:11:08 -0800 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2014-12-13 19:11:08 -0800 |
commit | 0175f038c506e9b29efdb14421ee3fd07adea401 (patch) | |
tree | a7066a6bf646b861ad83c7d82c916a9b4a1b7886 /lib/B | |
parent | 82935c72fde4e7b6d0fa8faf8f96fc31620c25fd (diff) | |
download | perl-0175f038c506e9b29efdb14421ee3fd07adea401.tar.gz |
Deparse chdir(bareword) without quotes
Diffstat (limited to 'lib/B')
-rw-r--r-- | lib/B/Deparse.pm | 14 | ||||
-rw-r--r-- | lib/B/Deparse.t | 3 |
2 files changed, 16 insertions, 1 deletions
diff --git a/lib/B/Deparse.pm b/lib/B/Deparse.pm index fca8b092fe..5a37b95f4d 100644 --- a/lib/B/Deparse.pm +++ b/lib/B/Deparse.pm @@ -2296,7 +2296,19 @@ sub pp_tell { unop(@_, "tell") } sub pp_getsockname { unop(@_, "getsockname") } sub pp_getpeername { unop(@_, "getpeername") } -sub pp_chdir { maybe_targmy(@_, \&unop, "chdir") } +sub pp_chdir { + my ($self, $op, $cx) = @_; + if ($op->flags & OPf_SPECIAL) { + my $kw = $self->keyword("chdir"); + my $kid = $self->const_sv($op->first)->PV; + my $code = $kw + . ($cx >= 16 || $self->{'parens'} ? "($kid)" : " $kid"); + maybe_targmy(@_, sub { $_[3] }, $code); + } else { + maybe_targmy(@_, \&unop, "chdir") + } +} + sub pp_chroot { maybe_targmy(@_, \&unop, "chroot") } sub pp_readlink { unop(@_, "readlink") } sub pp_rmdir { maybe_targmy(@_, \&unop, "rmdir") } diff --git a/lib/B/Deparse.t b/lib/B/Deparse.t index acf58fa381..8276ce6c21 100644 --- a/lib/B/Deparse.t +++ b/lib/B/Deparse.t @@ -2253,3 +2253,6 @@ my $x = ($r // [])->{'foo'}[0]; # multideref with complex middle index my(%h, $i, $j, $k); my $x = $h{'foo'}[$i + $j]{$k}; +#### +# chdir bareword +chdir FH; |