[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