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.