Edited at

Perl 6 の for ループが lazy になった

More than 5 years have passed since last update.

Rakudo Star 2013.01 より for ループがデフォルトで lazy な挙動をするようになった。これが何を意味するか正確には把握していないが、ブロックの末尾にある for ループが LEAVE フェーズより後に実行されるようになったことには注意が必要そうだ:

use v6;

sub f() {
LEAVE { say 'leaving' }
for 1..3 {
say $_;
}
}

f;
say 4;

# => leaving
# => 1
# => 2
# => 3
# => 4

当然ながら、 for ループの後に文が続く場合、ループは文より先に実行される:

use v6;

sub f() {
LEAVE { say 'leaving' }
for 1..3 {
say $_;
}
say 'returning';
}

f;
say 4;

# => 1
# => 2
# => 3
# => returning
# => leaving
# => 4