use Coro::State; use Coro::Channel; { my $new; my $test = sub { my ($m, $f) = @_; print "In method\n"; $f->(1); $new->transfer($m); print "In method again\n"; $f->(2); $new->cancel(); $new->transfer($m); }; my $main = Coro::State->new(); my $f = sub { print "In block: $_[0]\n" }; $new = Coro::State->new($test, $main, $f); while ( !$new->is_zombie() ) { $main->transfer($new); } print "Done!\n"; } { my $new; my $test = sub { my ($m, $q) = @_; print "In method\n"; $q->put(1); $new->transfer($m); print "In method again\n"; $q->put(2); $new->cancel(); $new->transfer($m); }; my $main = Coro::State->new(); my $ch = Coro::Channel->new(); $new = Coro::State->new($test, $main, $ch); while ( !$new->is_zombie() ) { $main->transfer($new); my $got = $ch->get(); print "Inblock: $got\n"; } print "Done!\n";