Las subrutinas son llamadas con el operador `do' o con `&'. Cualquiera de los tres tipos de datos principales puede ser pasador como parámetro o usado como un valor de salida.
do foo(1.43);
do foo(@lista);
$x = &foo('red', 3, @others);
@lista = &foo(@otralista);
%foo = &foo($foo, @foo);
Los parámetros son recibidos por la subrutina en el arreglo especial @_. Si se desea, estos pueden ser copiados a varaibles locales. Esto es especialmente útil en subrutinas recursivas.
$result = &simple ($alpha, $beta, $todo);
sub simple {
local($x, $y, @lodemas ) = @_;
local($sum, %seen);
return $sum;
}
Las subrutinas pueden ser llamadas indirectamente :
$foo = 'alguna_rutina';
do $foo(@list);
($x, $y, $z) = do $foo(%maps);