summaryrefslogtreecommitdiff
path: root/lib/B
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2014-12-13 19:11:08 -0800
committerFather Chrysostomos <sprout@cpan.org>2014-12-13 19:11:08 -0800
commit0175f038c506e9b29efdb14421ee3fd07adea401 (patch)
treea7066a6bf646b861ad83c7d82c916a9b4a1b7886 /lib/B
parent82935c72fde4e7b6d0fa8faf8f96fc31620c25fd (diff)
downloadperl-0175f038c506e9b29efdb14421ee3fd07adea401.tar.gz
Deparse chdir(bareword) without quotes
Diffstat (limited to 'lib/B')
-rw-r--r--lib/B/Deparse.pm14
-rw-r--r--lib/B/Deparse.t3
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;