my $sub; $sub = sub { my $num = shift; if (0 == $num) { return 1; } else { return $num * $sub->($num - 1); } }; print $sub->(5), "\n"; print $sub->(6), "\n"; #### function (builder) { return function (n) { return builder(builder)(n); } }( function (recurse) { return function (n) { if (0 == n) return 1; else return n * recurse(recurse)(n); }; } )( 5 // THIS is the factorial to compute );