miércoles, 20 de abril de 2011

subrutina en una variable

Todavía no se bien que utilidad tiene, pero estaba jugando con variables, y me encontré esto

$a = sub { return $_[0] . " mundo"; }
print &$a("Mundo");

Lo que imprime
Hola Mundo

Sin el &, básicamente lo que imprime es:
CODE(0x6188e8)

2 comentarios:

  1. Hola

    Se puede usar así (cambiando la sintaxis):

    $a->("Mundo");

    Y se puede usar con Dispatch Tables. Supongamos una función que filtra un texto:

    sub filtrar {
    ( $filtro, $texto ) = @_;
    $a{"solo_letras"} = sub { s/[^A-Za-z]//g; $_ };
    $a{"a_mayusculas"} = sub { uc($_); $_ };

    return $a{$filtro}->($texto);
    }

    Podés llamarla así:
    filtrar("a_mayusculas", "Hola que tal");

    El día de mañana, si querés agregar un filtro nuevo, podés agregar un miembro al hash %a dentro de la función, y tenés todo ahí.

    ResponderBorrar
  2. Hola dvadell, gracias por el comentario. Muy buen ejemplo.

    ResponderBorrar