[Madrid-pm] PBP y prototipos
Joaquín Ferrero
explorer en joaquinferrero.com
Mar Mar 27 05:42:29 PDT 2007
DervishD escribió:
>
> Supongamos que una función nuestra espera un filehandle: ¿cómo se lo
> pasamos como parámetro sin un prototipo si el filehandle no está
> guardado en un escalar? Luego está el problema de usar ese filehandle,
> ahí no entro, pero no se me ocurre otra forma de poder hacer esto si yo
> escribo "testme":
>
> testme STDOUT, "mensaje"; # testme(*@)
>
Creo que eso está respondido en el 10.1 y 10.2: No usar barewords como
filehandles.
> Otra cosa para la que considero imprescindibles los prototipos es
> para poder pasar bloques de código a una función y que se evaluen
> después dentro de ella. Para eso uso "&" en el prototipo. ¿De qué otra
> forma se pueden pasar bloques de código sin usar prototipos *y sin que
> el bloque de código sea el último parámetro*? Por supuesto, me refiero a
> bloques de código anónimos, si no se usa \&codeblock y ya está, eso lo
> sé, y por otro lado querría evitar tener que poner "sub" delante, para
> que quienes usen la función puedan escribir algo como esto:
>
> testmeagain {
> print "loquesea";
> haz_algo_aquí;
> ...
> } "mensaje cuando termines";
>
> así, sin la coma y sin "sub". Eso, sin prototipos, tampoco sé cómo
> hacerlo.
>
Por lo que llevo leído (hasta el 12.0), Conway busca hacer un estilo limpio
tanto simplificando las estructuras a usar como facilitar la vida al lector
del programa, por lo que huye de construcciones demasiado complejas o de no
ahorrar escritura si eso facilita su comprensión.
En tu caso, aplicar la 9.1: siempre usar paréntesis, aparte de que creo que él
buscaría pasar el código con el sub {}, pero fíjate en los ejemplos de la
8.14, en la que usa funciones de Scalar::Util, List::Util y List::MoreUtils
de la misma forma que lo haces tu.
Quizás...
my $impresion_de = sub {
print "loquesea";
haz_algo_aquí;
...
}
testmeagain( $impresion_de, "mensaje cuando termines");
No sé si te he aclarado algo o te he liado más... 7B^)
--
JoaquinFerrero.com Linux User #109802
msn/jab explorer en jab.pucela.net GPG/PGP 0x42DDB1FE
skype joaquinferrero phone +34670654075
Más información sobre la lista de distribución Madrid-pm