Subject: | next on last iteration of loop injects Mu into return value and fouls termination test |
There are some misbehaviors when a next clause is encountered on what would be the last iteration of a loop construct. An extra Mu is injected into the return value for that iteration, and the termination test may be bypassed.
skids: m: my $b; (loop ($b = 4; $b; $b--) { next if $b == 1; $_ }).note
(02:05:08 PM) camelia: rakudo-moar 6bb1b5: OUTPUT: «((Any) (Any) (Any) (Mu) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (A…»
m: my $b; (loop ($b = 4; $b > 0; $b--) { next if $b == 1; $b }).note # version without escaping the termination condition
(02:13:17 PM) camelia: rakudo-moar 6bb1b5: OUTPUT: «(4 3 2 (Mu))»
(02:13:25 PM) skids: still have that Mu.