async_pool で coro が再利用されているのを確認する

use strict;
use warnings;
use Coro;

for my $i (0..4) {
    print $i .q{,}. async_pool {
        print "$i-1\n";
        cede;
        print "$i-2\n";
        cede;
        print "$i-3\n";
    }, "\n";
    print "main\n";
    cede;
}
[takeyuki@sunya ~]$ perl a.pl
0,Coro=HASH(0x94f4398)
main
0-1
1,Coro=HASH(0x94efef8)
main
0-2
1-1
2,Coro=HASH(0x94eb908)
main
0-3
1-2
2-1
3,Coro=HASH(0x94f4398)
main
1-3
2-2
3-1
4,Coro=HASH(0x94efef8)
main
2-3
3-2
4-1

最初、$i が 0 で、メインスレッド (以降 coro-main) において 0 番目の coro (以降、coro-0) が作られる。それが HASH(0x94f4398)。作られただけでまだこの coro は動かない。メインスレッド coro-main が "main" を出力した後 cede して coro-0 に制御が移り、"0-1" が表示される。coro-0 の cede で今度は main-coro に制御が移り、$i が 1 となって 1 番目の coro が生成される。この coro-1 は HASH(0x94efef8)。"main" を表示後 coro-main が cede して coro-0 に移り、coro-0 は "0-2" を表示後 cede、それにより coro-1 に移り "1-1" を表示して cede する。また coro-main に戻り $i が 2 となり coro-2 HASH(0x94eb908) が生成される。"main" 表示 (by coro-main) の後、coro-0 に移るが、coro-0 は "0-3" を表示してブロックを抜ける、すなわち terminate する。これによって coro-0 は再利用可能な状態になる。coro-0 を抜けたので制御は次の coro-1 に移り、coro-1 は "1-2" を表示して cede、coro-2 が "2-0" を表示して cede、coro-main に制御が移る。coro-main は $i が 3 で async_pool するがこのとき新たに coro オブジェクトを生成するのではなく、再利用可能な状態でプールされている HASH(0x94f4398)、かつての coro-0 を返す。
というような感じ。