Commit | Line | Data |
bb5a920e |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
171cd606 |
6 | use Test::More tests => 2; |
bb5a920e |
7 | use Test::Exception; |
8 | |
bb5a920e |
9 | use Moose::Autobox; |
10 | |
11 | # we need a control in the experiment |
12 | sub fact { |
13 | my $n = shift; |
14 | return 1 if $n < 2; |
15 | return $n * fact($n - 1); |
16 | } |
17 | |
18 | *fact2 = sub { |
19 | my $f = shift; |
20 | sub { |
21 | my $n = shift; |
22 | return 1 if $n < 2; |
23 | return $n * $f->($n - 1); |
24 | } |
25 | }->y; |
26 | |
27 | *fact3 = sub { |
28 | my $f = shift; |
29 | sub { |
30 | my $n = shift; |
31 | return 1 if $n < 2; |
32 | return $n * ($f->($f))->($n - 1); |
33 | } |
34 | }->u; |
35 | |
36 | is(fact(10), fact2(10), '... our factorials match'); |
37 | is(fact(10), fact3()->(10), '... our factorials match'); |
38 | |