typestar

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

  1. sub { ... } asignado a $double es una referencia a código; $double->(21) la invoca.
  2. make_counter devuelve una sub anónima que se cierra sobre su propio $count privado.
  3. Cada llamada vía $tick incrementa el contador capturado — estado sin ninguna global a la vista.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 3 de 3 en Subrutinas; paso 18 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →