Nous devrions tous connaître les problèmes liés à la prototypes en Perl. Voici les deux biggies: p>
Le deuxième élément est celui que je suis curieux de savoir le moment. P>
Je connais deux façons de subvertir / travail autour / ignorer l'application prototype lors de l'appel d'un sous-programme: p>
Foo-> subroutine_name (); code> li>
- Appelez le sous avec un premier
& code> Sigil. & subroutine_name (); code> li>
ul>
Y at-il d'autres cas intéressants que j'ai manqué? P>
udpate: strong> p>
d foy @ Brian, je ne veux pas particulièrement pour échapper à des prototypes, mais je me suis demandé « combien de façons sont là pour le faire? » Je pose cette question par curiosité. P>
@jrockway, je suis d'accord avec vous, et je crois que vous avez plus explicitement et de façon plus concise décrit mon premier point en ce qui concerne les problèmes avec des prototypes, que les gens comprennent mal les. Peut-être les mensonges de problème dans les attentes du programmeur et non pas dans la fonction. Mais c'est vraiment une question philosophique du genre, je ne veux pas avoir. P>
3 Réponses :
Appelez-le via une référence de sous-programme.
foo(); sub foo($) { print "arg is $_[0]\n" }
Fait intéressant, prototype d'impression ($ SUB), "\ n"; code> imprime toujours "$" (le prototype correct).
Le second donne un avertissement: Main :: FOO () Appelé trop tôt pour vérifier le prototype ...
Cela ressemble à n'importe quel appel qui est déterminé aux étapes d'exécution autour d'eux. Cela a du sens puisqu'ils sont traités lors de la compilation.
Utilisation du goto & nom code> Syntaxe. P>
type-glob. aussi, considérez la barre-> foo () réécrite en notation indirecte: p> foo Bar
Ce n'est pas un problème". Les prototypes sont des allusions pour la LXER, et non un cadre de validation de données. Comprenez cela et vous n'aurez pas de problèmes.
Référence croisée à la question où cela est discuté plus en détail: Stackoverflow.com/questions/297034/...
Pourquoi essayez-vous d'ignorer un prototype?