array
especial @_
.
El valor retornado puede hacerse explícito utilizando
el operador return <expresion>
el cual termina la subrutina.
Si no se usa, el valor retornado por la subrutina es el valor de la
última expresión computada.
Veamos un ejemplo:
> cat return.pl #!/usr/bin/perl -w sub dictionary_order { @ordered = sort @_; return @ordered; } @a = &dictionary_order(keys %ENV); foreach (@a) { print "$_ $ENV{$_}\n"; }
El hash %ENV
contiene las variables de entorno.
La función interna return
finaliza inmediatamente
la subrutina y hace que el valor especificado después del return
sea devuelto como resultado.
Si no hay sentencia return
el valor devuelto es el asociado
con la última sentencia ejecutada.
Observe como los argumentos en la llamada se han puesto entre paréntesis.
Al igual que las variables, las subrutinas tiene un símbolo de prefijo que indica que se trata de funciones.
El nombre ``formal'' de una subrutina tiene el prefijo &
, el cual puede usarse en la llamada:
@sorted = &dictionary_order("eat", "at", "Joes");
sin embargo, no debe usarse cuando se define la subrutina.
El prefijo &
puede omitirse si por el contexto es claro que se trata de una
llamada a función:
@sorted = dictionary_order ("eat", "at", "Joes"); @sorted = dictionary_order (@unsorted); @sorted = dictionary_order (@sheep, @goats, "shepherd", $goathered);
Si una subrutina no requiere argumentos, puede ser llamada con una lista vacía de argumentos. La lista puede ser completamente omitida siempre que Perl conozca de antemano que se trata de una función. Asi tenemos:
sub get_next { return <>; } prompt(); # correcto $next = get_next(); #correcto prompt; # error; prompt no ha sido definido aún $next = get_next; # correcto: get_next fue definido arriba sub prompt { print "next> "; }