AnyEventの練習

噂のsleepsort書いてみた。AnyEvent->timer の戻り値捨てると動かないんだなぁとか。

#!/usr/bin/env perl

use strict;
use warnings;
use Data::Dumper;
use AnyEvent;

sub sleepsort {
    my (@args) = @_;

    my $cv = AnyEvent->condvar;
    my (@sorted, @timers);

    for my $arg (@args) {
        $cv->begin;
        push @timers, AnyEvent->timer(
            after => $arg / 10,
            cb => sub {
                push @sorted, $arg;
                $cv->end;
            },
        );
    }

    $cv->recv;
    \@sorted;
}

print Dumper sleepsort(@ARGV);