sub comp { $f = shift; $g = shift; return sub { $x = shift; return $f->($g->($x)); }; } sub test { return (shift) . " test"; } print comp(\&test, comp(\&test,\&test))->("test ");