diff options
author | Nicholas Clark <nick@ccl4.org> | 2021-04-26 11:23:33 +0000 |
---|---|---|
committer | Ricardo Signes <rjbs@semiotic.systems> | 2021-10-15 09:28:27 -0400 |
commit | bf6e71ff82686b1287ef59c1565cc669d5301cc5 (patch) | |
tree | c55666c8154d75867ccb36a1ffe3a59f8b60de0b | |
parent | c386ecc10be9e73917fa6b819321f0cc47cacdb6 (diff) | |
download | perl-bf6e71ff82686b1287ef59c1565cc669d5301cc5.tar.gz |
B::Deparse now handles n-at-a-time for.
-rw-r--r-- | lib/B/Deparse.pm | 15 | ||||
-rw-r--r-- | lib/B/Deparse.t | 10 |
2 files changed, 23 insertions, 2 deletions
diff --git a/lib/B/Deparse.pm b/lib/B/Deparse.pm index 2d33039a80..12f6a63670 100644 --- a/lib/B/Deparse.pm +++ b/lib/B/Deparse.pm @@ -52,7 +52,7 @@ use B qw(class main_root main_start main_cv svref_2object opnumber perlstring MDEREF_SHIFT ); -$VERSION = '1.58'; +$VERSION = '1.59'; use strict; our $AUTOLOAD; use warnings (); @@ -3954,7 +3954,18 @@ sub loop_common { } else { $ary = $self->deparse($ary, 1); } - if (null $var) { + my $iter_targ = $kid->first->first->targ; + if ($iter_targ) { + # for my ($foo, $bar) () stores the count (less 1) in the targ of + # the ITER op. + my @vars; + my $targ = $enter->targ; + while ($iter_targ-- >= 0) { + push @vars, $self->padname_sv($targ)->PVX; + ++$targ; + } + $var = 'my (' . join(', ', @vars) . ')'; + } elsif (null $var) { $var = $self->pp_padsv($enter, 1, 1); } elsif ($var->name eq "rv2gv") { $var = $self->pp_rv2sv($var, 1); diff --git a/lib/B/Deparse.t b/lib/B/Deparse.t index 3904773655..385c63ae7a 100644 --- a/lib/B/Deparse.t +++ b/lib/B/Deparse.t @@ -2530,6 +2530,16 @@ foreach \&a (sub { 9; } , sub { 10; } ) { die; } #### +my %hash; +foreach my ($key, $value) (%hash) { + study $_; +} +#### +my @ducks; +foreach my ($tick, $trick, $track) (@ducks) { + study $_; +} +#### # join $foo, pos my $foo; $_ = join $foo, pos |