AnyEventでechoサーバ

まだAnyEventのあたりの使い方とか挙動とかを把握しきれていない。
ちょっと練習にAnyEvent::SocketとAnyEvent::Handleで超シンプルなechoサーバを書いてみた

#!/usr/bin/perl
use strict;
use warnings;
use AnyEvent::Socket;
use AnyEvent::Handle;

my $cv = AE::cv;

tcp_server undef, 1982, sub {
    my $hdl;
    $hdl = AnyEvent::Handle->new(
        fh => shift,
        on_read => sub {
            $hdl->push_write(delete $hdl->{rbuf});
        },
        on_eof => sub {},
    );
};

$cv->recv;

これを動かしておいて、外から繋ぐとechoサーバとして動いてくれる。はず。

$ telnet 127.0.0.1 1982
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hoge
hoge
fuga
fuga
Hello world!
Hello world!
^]

こんなカンジでいいのかな… AnyEvent::Handleのread/writeの仕組みは分かってくると面白そう!