On Wed, 09 Aug 2017 13:06:46 -0700, sml...@gmail.com wrote:
> 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
> 

Fixed with one or more of (better-sched)
7c18112c59d20413b82356e5c48b38d8a66fc7ea
c285b489c6629ccdf0c4cb11d2d695b9ef1f890c
7fcab1067de4757bfdf2fdd1c66893ce4ab06e1b
89b9ac7830bdc195cb303f5241641e0dbe0ebbde
683037be698d0bdc21b3c23588085b2d076d7a0a
b5605c2dd6d361b705a59136c8ad641f245a5da5
c50d35a90e66346157b31cd92643c2a64e801c24
de311f46a98f13a5b0211d2585fbd9b17ce1bf2c
340d8ed3bb4b45af85708771bea396cf862a7330
3b98fb9e396d040a8cb2c32d23cee54a5e88f878
596611c8fdc3baf119bc94a8ea30efc0a12cf673
80b49320cf854ac68a17cdd216575ee26e380325
61a77e60a7d936415503d8916fcc7546569e9135
> 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