Was forgetting for a minute that declaring $b there would actually scope it
inside the loop.
This isn't quite true - the output of Deparse is wrong.
The lexical is scoped wider than the loop, as can be seen
$ perl585 -le '$x=99; my $x = $_ for 1..3; print $x'
(Note that $::x isn't printed, the lexical $x is instead.)
However, the initialising and releasing of $x is
to within the loop.
That may be construed as a bug. There again, statement modifiers
on my declarations are usally buggy, and are best avoided.