# New Ticket Created by Александр Усиков # Please include the string: [perl #131152] # in the subject line of all future correspondence about this issue. # <URL: https://rt.perl.org/Ticket/Display.html?id=131152 >
perl6 -v This is Rakudo version 2017.01 built on MoarVM version 2017.01 sub f { my $i = 0; while True { FIRST { say "FIRST: $i"}; LAST { say "LAST: $i"}; last if ++$i > 100; } } doesn't compile: ===SORRY!=== Cannot reference undeclared local 'LOOP_BLOCK_1' -------------------------- without FIRST gives an error: sub f { my $i = 0; while True { # FIRST { say "FIRST: $i"}; LAST { say "LAST: $i"}; last if ++$i > 100; } } f(); LAST: 0 No such method '!capture_phasers' for invocant of type 'Code' in block <unit> at t1.p6 line 16 ---------------------------- in Promises compiles but gives random results: await do for 1..10 { start { my $i = 0; loop { FIRST { say "FIRST: $i"}; LAST { say "LAST: $i"}; last if ++$i > 100; } } } FIRST: 0 FIRST: 0 FIRST: 2 FIRST: 0 LAST: 0 LAST: 5 LAST: 5 FIRST: 0 FIRST: 0 FIRST: 64 LAST: 103 LAST: 103 LAST: 103 FIRST: 103 LAST: 104 FIRST: 2 FIRST: 98 LAST: 102 LAST: 102 LAST: 102 --------------------------------- changing loop/while to for 1..* solves first two issues, but: ----------------------------------- using for 1..* instead of loop give more stable, but still sometimes incorrect results with promises: await do for 1..10 { start { my $i = 0; for 1..* { FIRST { say "FIRST: $i"}; LAST { say "LAST: $i"}; #say $i; last if ++$i > 100; } } } FIRST: 0 FIRST: 0 FIRST: 77 FIRST: 0 LAST: 101 LAST: 101 LAST: 101 LAST: 101 FIRST: 0 FIRST: 0 LAST: 101 FIRST: 0 LAST: 101 FIRST: 0 LAST: 101 FIRST: 0 LAST: 101 FIRST: 0 LAST: 101 LAST: 101