Typeglobs y Eficiencia

Hacer un alias via un typeglob es mas eficiente que usar una referencia. Para verlo usaremos el módulo Benchmark el cual proporciona, entre otras muchas, la función timethese :
lhp@nereida:~/Lperl/src$ cat -n benchtypeglobs3.pl
 1  #!/usr/bin/perl
 2  use strict;
 3  use Benchmark;
 4
 5  our ($i, $r, $b, $s);
 6
 7  local $i;
 8  *b = *i;
 9  $r = \$i;
10  $s = "i";
11
12  no strict 'refs';
13  timethese(4,
14    { reference => sub { for ($$r = 0; $$r < 1e6; $$r++) { $$r; } },
15      typeglob  => sub { for ($b = 0; $b < 1e6; $b++) { $b; } },
16      symbolic  => sub { for ($$s = 0; $$s < 1e6; $$s++) { $$s; } },
17    });
El resultado de la ejecución en nereida nos da la siguiente relación:
lhp@nereida:~/Lperl/src$ benchtypeglobs3.pl
Benchmark: timing 4 iterations of reference, symbolic, typeglob...
 reference:  1 wallclock secs ( 1.13 usr +  0.00 sys =  1.13 CPU) @  3.54/s (n=4)
  symbolic:  6 wallclock secs ( 6.33 usr +  0.00 sys =  6.33 CPU) @  0.63/s (n=4)
  typeglob:  1 wallclock secs ( 0.75 usr +  0.00 sys =  0.75 CPU) @  5.33/s (n=4)

Casiano Rodríguez León
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19