PerlBeginners#14の予習(Mojo::IOLoop::Delay)
Mojo::IOLoop::Delayの使い方がよくわからなかったので実験。 5秒後に、"end"が表示され、そのあとBOOM!を表示します。 $delay->beginの返却値がコードブロックになっていて、 5秒後にそのコードレファレンスを呼ぶようにするのが味噌。
use Mojo::IOLoop::Delay; $|=1; my $delay = Mojo::IOLoop::Delay->new; $delay->steps(sub { print 'BOOM!' }); my $end = $delay->begin; Mojo::IOLoop->timer(5 => sub { print "end"; $end->(); }); $delay->wait;
上記コードだと分かりやすいんですが、下のように書くと, 若干戸惑うと思う。5秒後に$delay->beginが呼び出されるように 読めてしまうけど。$delay->beginは即時呼び出しされているんですね。
use Mojo::IOLoop::Delay; $|=1; my $delay = Mojo::IOLoop::Delay->new; $delay->steps(sub { print 'BOOM!' }); Mojo::IOLoop->timer(5 => $delay->begin); $delay->wait;