[Perl] Como llamo a una rutina

Alejandro G. Bedoya nezumi@prodigy.net.mx
Thu, 24 Jan 2002 18:09:58 -0600


 > >perl -e 'print foo 1; sub foo { $_[0] + 1 }' --> no imprime nada
 >
 > >perl -e 'sub foo { $_[0] + 1 }; print foo 1' --> imprime '2'
 >
 > >Ahora, =BFquien me explica porqu=E9?
 >
 >     Porque $_ es la variable default que se modifica con ciertas
 > operaciones. para evitar que importe el orden de los subs se puede=
 usar
 > foo(1), para enviar el parametro adecuadamente a $_[0], sin que es=
te
agarre
 > otro valor en el inter...

>Pero foo no est=E1 usando $_. Est=E1 usando el primer elemento del a=
rreglo
>@_. Los dos no tienen nada que ver.

    Ciertamente, la explicacion de Salvador es la correcta, es bronca=
 de
otro error. Sin embargo se soluciona con los parentesis. Si ves la pa=
gina de
http://www.perldoc.com/perl5.6/pod/perlsub.html

En la descripcion textualmente dice...

Like many languages, Perl provides for user-defined subroutines. Thes=
e may
be located anywhere in the main program, loaded in from other files v=
ia the
do, require, or use keywords, or generated on the fly using eval or
anonymous subroutines (closures). You can even call a function indire=
ctly
using a variable containing its name or a CODE reference.

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

Lo que me refiero con todo esto es que no importa el orden de las fun=
ciones,
como en javascript, donde no puedes llamar una funci=F3n sin haberla =
declarado
antes. O como en antiguo PASCAL, que tenias que escribir tu funcion a=
ntes de
llamarla. A Perl no le importa la posici=F3n de la funcion. El que la=
s estes
programando inadecuadamente es otra bronca.


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




--
Rodrigo