#!perl use strict; use warnings; use lib 't/lib'; use Test::More; use AnyEvent; use AsyncUtil qw[ perform_asyncly ]; BEGIN { use_ok('Promises'); } my $cv = AnyEvent->condvar; perform_asyncly( 'The quick brown fox jumped over the lazy dog', sub { split /\s/ => shift } )->then( sub { my @words = @_; perform_asyncly( \@words, sub { map { lc $_ } @{ $_[0] } } ); } )->then( sub { my @lowercased = @_; perform_asyncly( \@lowercased, sub { sort { $a cmp $b } @{ $_[0] } } ) } )->then( sub { my @sorted = @_; perform_asyncly( \@sorted, sub { my %seen; grep { not $seen{$_}++ } @{ $_[0] } } ) } )->then( sub { $cv->send( @_ ) }, sub { $cv->croak( 'ERROR' ) } ); is_deeply( [ $cv->recv ], [ qw[ brown dog fox jumped lazy over quick the ] ], '... got the expected values back' ); done_testing;