AnyEvent::IMAPListen + WebService::ImKayacを組み合わせた時

こんな感じ。

#!/usr/bin/env perl

use common::sense;
use utf8;

use FindBin;
use lib "$FindBin::Bin/AnyEvent-IMAPListen/lib";
use lib "$FindBin::Bin/WebService-ImKayac/lib";

use AnyEvent::IMAPListen;
use WebService::ImKayac;
use Config::Pit;
use Encode;

my $im = WebService::ImKayac->new(
    type => 'secret',
    %{ pit_get('im.kayac') }
);

my %param_base = (
    Ssl      => 1,
    Uid      => 1,
    Debug    => 1,
    on_error => sub {
        my ($self, $e_error, $l_error) = @_;
        warn "[DEBUG][ON_ERROR] ${e_error}, ${l_error}\n" if $self->debug;
    }
);

my @accounts = (
    {
     %{ pit_get('mail_account1') },
     on_notify => sub { # if mail comes
         my ($self, $header, $mid) = @_;

         my $from = $header->{From}->[0];
         my $subj = $header->{Subject}->[0];

         ($from = decode('MIME-Header', $from)) =~ s{ <.+?>$}{};
         $subj  = decode('MIME-Header', $subj);

         $im->send(sprintf('[mail][ACCOUNT1] subject:%s from:%s', $subj, $from));
     },
    },
    {
     %{ pit_get('mail_account2') },
     on_connect => sub {
         shift->imap->select('hoge');
     },
     on_notify => sub { # if mail comes
         my ($self, $header, $mid) = @_;

         my $from = $header->{From}->[0];
         my $subj = $header->{Subject}->[0];

         ($from = decode('MIME-Header', $from)) =~ s{ <.+?>$}{};
         $subj  = decode('MIME-Header', $subj);

         $im->send(sprintf('[mail][ACCOUNT2][hoge] subject:%s from:%s', $subj, $from));
     },
    }
);

my @listeners =
    map { AnyEvent::IMAPListen->new( %param_base, %$_ )->start }
    @accounts;

AE::cv->recv;