[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