Subs anónimas y clausuras en Perl
Código en una variable: sub { ... } sin nombre devuelve una referencia que llamas con la flecha.
use strict;
use warnings;
my $double = sub { return $_[0] * 2 };
print $double->(21), "\n";
sub make_counter {
my $count = 0;
return sub { return ++$count };
}
my $tick = make_counter();
$tick->();
print $tick->(), " ticks so far\n";
Cómo funciona
sub { ... }asignado a$doublees una referencia a código;$double->(21)la invoca.make_counterdevuelve una sub anónima que se cierra sobre su propio$countprivado.- Cada llamada vía
$tickincrementa el contador capturado — estado sin ninguna global a la vista.
Palabras clave y builtins usados aquí
myprintreturnsubuse
El intento, en números
- Líneas
- 14
- Caracteres a escribir
- 236
- Tokens
- 78
- Ritmo de tres estrellas
- 70 tpm
Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 67 segundos.
Paso 3 de 3 en Subrutinas; paso 18 de 27 en Fundamentos del lenguaje.