$cv を実行が終わるまで取っておこうとして、
package CVPrinter; use strict; use warnings; use AnyEvent; sub new { bless {}, $_[0] } sub print_cv { my ($self, $cv) = @_; $cv->cb(sub { my ($v) = $_[0]->recv; print $v, "\n"; delete $self->{cv}; # (1) }); $self->{cv} = $cv; # (2) }
なんて書き方をすると、
my $cv = AE::cv; my $t = AE::timer 0, 0, sub { $cv->("HELLO") };
のような$cvだと想定通りの動作だけど、
my $cv = AE::cv; $cv->("HELLO");
のような$cvを渡すと$self->{cv}は空っぽにはならないよって話。
cbに渡したルーチンはコールバックなので後で呼ばれそうなイメージがあるけど、先にsendが済んでいる場合はその場で呼ばれてしまう。ので(1)と(2)の実行順は完全にケースバイケース。