Otros modos de llamar a una subrutina

LLamada sin Paréntesis

Las subrutinas que han sido definidas en una parte anterior del programa pueden ser llamadas sin usar paréntesis alrededor de la lista de argumentos:

sub fun1 {
  my $a  = shift;   # shift asume el arreglo @_

  my $y = 2  * $a;
  return ( $y ); 
}
# mas tarde ...
$x = fun1 4;

LLamada con Ampersand y sin Lista de Argumentos

Otra forma de llamar una subrutina es usar & pero sin lista de argumentos. En tal caso, los contenidos actuales del array especial @_ se pasan como argumentos a la subrutina. Ejemplo:

sub checked_inverse {
  die "can't invert 0" if $_[0] == 0;
  my $inv  = &inverse; # llama a &inverse con los argumentos actuales
  die "inversion failed" unless $inv*$_[0] == 1;
  return $inv;
}
Observe que esto significa que hay una importante diferencia entre:
&checked_inverse # significa checked_inverse(@_);
y
checked_inverse; # significa checked_inverse();

LLamada con Retorno al Padre

Una última variación utiliza el prefijo & pero invoca a la subrutina a través de un goto:

goto &inverse;

Que llama a la función y le pasa los argumentos en @_. Pero no se vuelve a la siguiente sentencia después de la llamada. En vez de eso, goto &inverse reemplaza la llamada a la subrutina actual por una llamada a inverse. Esta forma especial de llamada se usa principalmente en las subrutinas de carga automática.



Subsecciones
Casiano Rodríguez León
2009-10-04