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.