イベントループを持つモジュールが抱える問題点
イベントループを持つモジュールの一例として,
たとえば1995年に故ニック・
ただし,
たとえば,
このような無駄な手間をなくすために生まれたのが,
GUIアプリのための?AnyEvent
連載第4回で取り上げたAny::Moose同様,
もっと具体的にいうと,
2005年の初公開当時,
- ※1
ちなみに,
レーマン氏は2003年に (2001年以降放置されていたGtk2移行前の) 旧Gtk向けPerlバインディングの最後のリリースを行ったあと, Gtk2/ Glibの最初期のバインディングのリリースも担当しています (~2003年11月)。旧Gtkへの対応が書かれていないのはこのような移行期の事情を承知していたためと考えておけばよいでしょう。
知られざる存在からの脱却
このように,
その意味で,
2008年6月にポルトガルで開催されたワークショップではAnyEventのベンチマーク結果を紹介する発表があったほか,
そこで,
- ※2
なお,
現状ではコミュニティが小さくフィードバックも乏しいため, AnyEventやCoroは環境によってうまくインストールできなかったり, 一部の機能が利用できないことがあります。特にWindows環境の場合 (古めのPerlを使っている場合は特に) うまく動作しない可能性が高いので, 必要に応じて仮想マシンを用意するなりPerlのバージョンをあげるなりしてください。
AnyEvent単体でのイベントプログラミング
AnyEventのもっとも単純な使い方として,
#!perl
use strict;
use warnings;
use AnyEvent::Impl::Perl;
use AnyEvent;
my $cv = AnyEvent->condvar;
my $io; $io = AnyEvent->io(
fh => \*STDIN,
poll => 'r',
cb => sub {
chomp(my $input = <STDIN>);
undef $io;
$cv->send($input);
},
);
if (defined(my $input = $cv->recv)) {
print "got: [$input]\n";
}
いささか見慣れない表記もありますが,
次の$io = AnyEvent->io(...) の部分がWatcherを用意している部分。my $io = AnyEventy->io(...) と書かず,
ここではファイルハンドル