{ my ($end, $curr, $result); my $_factorial; $_factorial = sub { return $result if $curr > $end; $result *= $curr++; goto &$_factorial; }; sub fact5 { ($end, $curr, $result) = (shift, 1, 1); $_factorial->(); } } #### Timing factorial of 5 Benchmark: running dragonchild1, dragonchild2, lexical, recursion, typeglob for at least 3 CPU seconds... dragonchild1: 3 wallclock secs ( 3.19 usr + 0.00 sys = 3.19 CPU) @ 106369.76/s (n=339745) dragonchild2: 3 wallclock secs ( 3.05 usr + 0.00 sys = 3.05 CPU) @ 89930.56/s (n=274558) lexical: 3 wallclock secs ( 3.06 usr + 0.00 sys = 3.06 CPU) @ 29376.63/s (n=90010) recursion: 4 wallclock secs ( 3.19 usr + 0.00 sys = 3.19 CPU) @ 68035.79/s (n=216694) typeglob: 3 wallclock secs ( 3.01 usr + 0.00 sys = 3.01 CPU) @ 27140.10/s (n=81556) Rate typeglob lexical recursion dragonchild2 dragonchild1 typeglob 27140/s -- -8% -60% -70% -74% lexical 29377/s 8% -- -57% -67% -72% recursion 68036/s 151% 132% -- -24% -36% dragonchild2 89931/s 231% 206% 32% -- -15% dragonchild1 106370/s 292% 262% 56% 18% -- #### Timing factorial of 15 Benchmark: running dragonchild1, dragonchild2, lexical, recursion, typeglob for at least 3 CPU seconds... dragonchild1: 3 wallclock secs ( 3.00 usr + 0.00 sys = 3.00 CPU) @ 47052.93/s (n=141347) dragonchild2: 3 wallclock secs ( 3.18 usr + 0.00 sys = 3.18 CPU) @ 40502.36/s (n=128595) lexical: 4 wallclock secs ( 3.24 usr + 0.00 sys = 3.24 CPU) @ 11222.80/s (n=36418) recursion: 3 wallclock secs ( 3.12 usr + 0.00 sys = 3.12 CPU) @ 26999.68/s (n=84104) typeglob: 3 wallclock secs ( 3.10 usr + 0.00 sys = 3.10 CPU) @ 10381.32/s (n=32234) Rate typeglob lexical recursion dragonchild2 dragonchild1 typeglob 10381/s -- -7% -62% -74% -78% lexical 11223/s 8% -- -58% -72% -76% recursion 27000/s 160% 141% -- -33% -43% dragonchild2 40502/s 290% 261% 50% -- -14% dragonchild1 47053/s 353% 319% 74% 16% -- ------------------------------------ Timing factorial of 25 Benchmark: running dragonchild1, dragonchild2, lexical, recursion, typeglob for at least 3 CPU seconds... dragonchild1: 3 wallclock secs ( 3.01 usr + 0.00 sys = 3.01 CPU) @ 29099.20/s (n=87705) dragonchild2: 3 wallclock secs ( 3.12 usr + 0.00 sys = 3.12 CPU) @ 25319.04/s (n=79122) lexical: 4 wallclock secs ( 3.30 usr + 0.00 sys = 3.30 CPU) @ 6828.22/s (n=22499) recursion: 4 wallclock secs ( 3.23 usr + 0.00 sys = 3.23 CPU) @ 16312.62/s (n=52755) typeglob: 3 wallclock secs ( 3.23 usr + 0.00 sys = 3.23 CPU) @ 6114.10/s (n=19773) Rate typeglob lexical recursion dragonchild2 dragonchild1 typeglob 6114/s -- -10% -63% -76% -79% lexical 6828/s 12% -- -58% -73% -77% recursion 16313/s 167% 139% -- -36% -44% dragonchild2 25319/s 314% 271% 55% -- -13% dragonchild1 29099/s 376% 326% 78% 15% -- #### Timing factorial of 80 Benchmark: running dragonchild1, dragonchild2, lexical, recursion, typeglob for at least 3 CPU seconds... dragonchild1: 4 wallclock secs ( 3.18 usr + 0.00 sys = 3.18 CPU) @ 8834.80/s (n=28130) dragonchild2: 4 wallclock secs ( 3.17 usr + 0.00 sys = 3.17 CPU) @ 7694.39/s (n=24422) lexical: 3 wallclock secs ( 3.11 usr + 0.00 sys = 3.11 CPU) @ 2067.44/s (n=6438) recursion: 3 wallclock secs ( 3.25 usr + 0.00 sys = 3.25 CPU) @ 5047.46/s (n=16379) typeglob: 3 wallclock secs ( 3.32 usr + 0.00 sys = 3.32 CPU) @ 1879.40/s (n=6249) Rate typeglob lexical recursion dragonchild2 dragonchild1 typeglob 1879/s -- -9% -63% -76% -79% lexical 2067/s 10% -- -59% -73% -77% recursion 5047/s 169% 144% -- -34% -43% dragonchild2 7694/s 309% 272% 52% -- -13% dragonchild1 8835/s 370% 327% 75% 15% --