use List::Util qw(reduce); sub compose { reduce { sub { $b->($a->(@_)) } } @_; }