Cocoa::EventLoop
そういえば Cocoa::EventLoop と言うモジュールを書いたんでした。
これはもともと AnyEvent::Impl::NSRunLoop として書いていたイベントループ処理部分だけを単体モジュールとして切り出した物で、 AnyEvent を使わなくても Cocoa のイベントループを Perl から使用できるというものです。
くわしくはドキュメントを参照してもらうとして、Cocoa::Growl を使ったサンプルを載せてみます:
use Cocoa::EventLoop;
use Cocoa::Growl;
my $done = 0;
growl_notify(
name => 'Notification Name',
title => 'Hello',
description => 'Cocoa World!',
on_click => sub {
$done++;
},
on_timeout => sub {
$done++;
},
);
Cocoa::EventLoop->run_while(0.1) while !$done;
これを AnyEvent で書くと:
use AnyEvent 5.30;
use Cocoa::EventLoop;
use Cocoa::Growl;
my $cv = AnyEvent->condvar;
growl_notify(
name => 'Notification Name',
title => 'Hello',
description => 'Cocoa World!',
on_click => sub {
$cv->send;
},
on_timeout => sub {
$cv->send;
},
);
$cv->recv;
ほぼ一緒ですね。 また、この例ではわからないですがtimerやioのインタフェースもAnyEventに合わせてあるのでほとんど同じ感じで使うことができます。
ただまぁ、AnyEventには豊富なライブラリがあるため、上記のGrowlのサンプル以上に複雑なことをする場合は素直にAnyEventを使うのがいいかと思います。