La sous-routine() forme désactive le prototype de la vérification. Cela peut ou peut ne pas être ce que vous voulez.
http://www.perl.com/doc/manual/html/pod/perlsub.html#Prototypes
Prototypes vous permettent de spécifier le nombre et le type de votre sous-routine arguments, et ont été vérifiées au moment de la compilation. Cela peut fournir des informations utiles d'aide au diagnostic.
Les Prototypes ne s'appliquent pas aux appels de méthode, ou les appels effectués à l'ancienne de style à l'aide de l' & préfixe.
Le & est nécessaire pour faire référence ou de déréférencement d'un sous-programme ou code de référence
par exemple
sub foo {
# a subroutine
}
my $subref = \&foo; # take a reference to the subroutine
&$subref(@args); # make a subroutine call using the reference.
my $anon_func = sub { ... }; # anonymous code reference
&$anon_func(); # called like this
Protypes ne sont pas applicables à la sous-routine références soit.
La sous-routine formulaire est également utilisé dans la soi-disant magie goto forme.
L'expression goto &subroutine
, remplace l'appel de contexte avec un appel au sous-programme nommé, à l'aide de la valeur actuelle de @_.
En essence, vous pouvez passer d'un appel à une sous-routine avec un appel à l'nommé un. C'est une pratique courante dans de chargement automatique de blocs, où un différé sous-programme appel peut être fait, peut-être avec quelques modifications à @_ , mais il semble pour le programme entièrement comme si c'était un appel à l'nommé sous.
par exemple
sub AUTOLOAD {
...
push @_, @extra_args; # add more arguments onto the parameter list
goto &subroutine ; # change call another subroutine, as if we were never here
}
}
voir l' explication détaillée de cette technique ici