next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Otros modos de llamar Sup: Subrutinas Ant: Definición de subrutinas Err: Si hallas una errata ...

Argumentos y valores de retorno

Los argumentos pasados a una subrutina están disponibles dentro del bloque via el 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> "; }


next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Otros modos de llamar Sup: Subrutinas Ant: Definición de subrutinas Err: Si hallas una errata ...
Casiano Rodríguez León
2006-02-21