[Madrid-pm] PBP y prototipos

DervishD bugs en dervishd.net
Mar Mar 27 04:28:18 PDT 2007


    Hola a todos :)

    En el capítulo 9 de "Perl Best Practices", el amigo Conway
recomienda no usar prototipos. Estoy parcialmente de acuerdo, y
cualquiera que lea PBP y vea por qué recomienda eso estará también de
acuerdo. Sin embargo, creo que hay un par de casos en los que es
imprescindible usar prototipos, y quería que me corrigiéseis si no es
así. De hecho, espero que sea un problema mío porque simplificaría algo
de código que tengo.

    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(*@)

    Por supuesto, siempre se puede pasar "*STDOUT", pero yo a lo que me
refiero es a que testme no tenga una sintáxis demasiado distinta a
"print", por ejemplo. Vale que la coma después del filehandle ya la va a
hacer distinta, pero...

    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.

    Gracias mil por adelantado :)

    Raúl Núñez de Arenas Coronado

-- 
Linux Registered User 88736 | http://www.dervishd.net
It's my PC and I'll cry if I want to... RAmen!


Más información sobre la lista de distribución Madrid-pm