[Perl] Como llamo a una rutina

Alejandro G. Bedoya nezumi@prodigy.net.mx
Fri, 25 Jan 2002 07:54:28 -0600


> Est=E1s de necio, verdad?

    Pos tu, que estas peor que la Sant=EDsima Inquisici=F3n. Que si u=
no dice
libreria es pecado capital, que si lo otro, que si esto... lo =FAnico=
 que hay
que entender es que:

            1;
            sub algo {
                    blah!
                }

es igual a

            sub algo {
                    blah!
                }
            1;


    Y sin embargo, las funciones se pueden declarar donde sea....



> N=F3tese el "These may be located anywhere in the main program".

>N=F3tese que estabamos hablando del orden en bibliotecas y que el p=
=E1rrafo
>que citas habla del lugar de la definici=F3n.

    Ah, perd=F3n, se me olvidaba que tambien eres perito en traduccio=
nes....
Pero si lees atentamente dice "Like many languages, Perl provides for
user-defined subroutines. These may be located anywhere in the main
program", en donde THESE se refiere a las USER-DEFINED SUBROUTINES,
indicando ademas que pueden estar en bibliotecas.

    Tan es asi que mas adelante dentro de esa misma p=E1gina se muest=
ran
algunos ejemplos donde la funcion se llama antes de declararla.


>El que no uses par=E9ntesis donde no los necesitas no implica que es=
t=E9s
>programando inadecuadamente, pues aunque usted no lo crea, perl es d=
e
>los pocos lenguajes en que un par de par=E9ntesis de m=E1s cambia la
>sem=E1ntica de las cosas, as=ED que la practica com=FAn de ignorar l=
a
>precedencia mediante parentizar a raja tabla, puede resultar
>peligros=EDsimo. C.f. ejemplo com=FAn de 'my $a =3D ...' vs 'my($a) =
=3D ...'

    Claro que cada quien puede programar como quiera, y mas en PERL s=
eg=FAn
tengo entendido, pero es com=FAn poner parentesis en los parametros e=
n las
funciones, tan es as=ED que en la misma p=E1gina que menciono usan en=
 los
ejemplos dichos parentesis. En lo personal, yo considero que se ve ma=
s
entendible con parentesis las funciones, de por si PERL parece lengua=
je de
solo escritura.

>El que el tu veas un foo(bar) no implica que bar sea par=E1metro de =
la
>funci=F3n foo, pues eso depende de la declaraci=F3n de foo.

    Tampoco foo bar, y?

>En resumen, el que perl no requiera, por default que declares las co=
sas
>como en otros lenguajes, no implica que no importe si las declaras o=
 no,
>y puesto que el orden de las declaraciones importa y como las
>definiciones pueden implicar declaraciones su orden tambi=E9n puede
>importar.

    Pues depende de tu nivel de programaci=F3n el que quede bien el p=
rograma
al final, si declaras o no es tu bronca. "No es lo mismo papaya tapat=
ia, que
t=EDa tapate la papaya". Depende de lo que quieras decir, lo bueno es=
 que PERL
te permite poner las funciones despues de llamarlas, si ya dices otra=
 cosa
es tu bronca, pero sin embargo te deja hacerlo.


>Y volviendo al punto original, como el valor devuelto por 'do' es el=
 de
>la _=FAltima_ sentencia evaluada la _mejor_ forma para garantizar qu=
e 1;
>(o cualquier otro valor 'verdadero') sea =E9sa =FAltima sentencia es=
 ponerla
>al final.

    Cual do???  La =FAnica forma de garantizar algo, es programando
adecuadamente. Toda esta discusi=F3n me recuerda a una pregunta que a=
lguien
hizo en un foro de PERL:

    P: Porque PERL no tiene forma de declarar constantes???

    R: Porque un buen programador jam=E1s modificaria una variable po=
r error.


---
Sinceramente...
Alejandro G. Bedoya
InterAccion.COM          Ponemos su Internet en Acci=F3n