# New Ticket Created by  Sam S. 
# Please include the string:  [perl #131871]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/Ticket/Display.html?id=131871 >


This bug was found as a side-effect of RT #131870, but might be a 
separate issue:

     ➜ await ^10 .map: -> $i { start { "".match(/ { say $i } /) } }
     7
     7
     6
     6
     7
     8
     9
     9
     9
     9

Somehow, multiple iterations see the same value for the closed-over 
variable `$i`.

Without the `await` and `start`, it prints each number from 0 to 9 
exactly once, like it should.

---

Note that the problem is only with *code blocks* inside regexes. When a 
lexical variable is interpolated into the top-level of a regex directly, 
things seem to work fine:

     ➜ say await ^10 .map: -> $i { start { "0123456789".match(/ $i /) } }
     (「0」 「1」 「2」 「3」 「4」 「5」 「6」 「7」 「8」 「9

---

Bot-friendly version that reliably prints `False`, even though it should 
print `True`:

     my $c = Channel.new;   (await ^100 .map: -> $i { start "".match(/ { 
$c.send: $i } /) });   $c.close; say $c.sort.list eqv (^100).list;

According to bisectable6 and committable6 this prints `False` for all 
past Perl 6 releases, so it's not a regression but rather an old bug.

Reply via email to