sub foldl { my $f = shift; my $z = shift; $z = $f->($z, $_) for @_; $z; } sub compose { foldl( \&compose2, @_ ) }