next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Tipo de objeto y Sup: Subrutinas Ant: Argumentos y valores de Err: Si hallas una errata ...

Otros modos de llamar a una subrutina

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 {
  $a  = shift;   # shift asume el arreglo @_

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

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;
  $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 sutil diferencia entre:
&checked_inverse # significa checked_inverse(@_);
y
checked_inverse; # significa checked_inverse();

Una última variación utiliza el prefijo & pero invoca a la subrutina a tarvé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.


next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Tipo de objeto y Sup: Subrutinas Ant: Argumentos y valores de Err: Si hallas una errata ...
Casiano Rodríguez León
2006-02-21