El siguiente ejemplo memoiza la función que computa los números de Fibonacci:
lhp@nereida:~/Lperl/src$ cat -n memoize2.pl
 1  #!/usr/bin/perl -w
 2  use Benchmark;
 3  use Memoize;
 4
 5  sub fib {
 6    my $n = shift;
 7    if ($n < 2) { $n }
 8    else { fib($n-1)+fib($n-2) }
 9  }
10
11  {
12
13  my @fib = (0, 1);
14
15    sub fibm {
16      my $n = shift;
17
18      return $fib[$n] if defined $fib[$n];
19      $fib[$n] = fibm($n-1)+fibm($n-2);
20    }
21  }
22
23  sub fibM {
24    my $n = shift;
25    if ($n < 2) { $n }
26    else { fib($n-1)+fib($n-2) }
27  }
28
29  memoize 'fibM';
30
31  my ($r, $m, $a);
32  timethese(2, {
33    recursivo => sub { $r = &fib(30) },
34    memoized  => sub { $m = &fibm(30) },
35    automemoized  => sub { $a = &fibM(30) }
36    }
37  );
38
39  print "recursivo = $r, memoized = $m, automemoized = $a\n";
Este es un ejemplo en el cuál es conveniente ocultar la cache
e impedir posibles colisiones de la variable @fib con cualesquiera
otras variables que pudieran existir en el programa. La
solución es hacer una clausura (lıneas 10-20).
La ejecución muestra como la técnica mejora claramente el rendimiento:
lhp@nereida:~/Lperl/src$ memoize2.pl
Benchmark: timing 2 iterations of automemoized, memoized, recursivo...
automemoized:  3 wallclock secs ( 2.98 usr +  0.00 sys =  2.98 CPU) @  0.67/s (n=2)
            (warning: too few iterations for a reliable count)
  memoized:  0 wallclock secs ( 0.00 usr +  0.00 sys =  0.00 CPU)
            (warning: too few iterations for a reliable count)
 recursivo:  6 wallclock secs ( 5.97 usr +  0.00 sys =  5.97 CPU) @  0.34/s (n=2)
            (warning: too few iterations for a reliable count)
recursivo = 832040, memoized = 832040, automemoized = 832040
 
