11
votes

Combien de façons pouvez-vous appeler un sous-programme et ignorer son prototype dans Perl?

Nous devrions tous connaître les problèmes liés à la prototypes en Perl. Voici les deux biggies:

  • ils ne travaillent pas comme des prototypes dans d'autres langues, afin que les gens comprennent mal les.
  • ils ne sont pas applicables à toutes les façons d'appeler un sous-programme.

    Le deuxième élément est celui que je suis curieux de savoir le moment.

    Je connais deux façons de subvertir / travail autour / ignorer l'application prototype lors de l'appel d'un sous-programme:

    • Appelez le sous comme méthode. Foo-> subroutine_name ();
    • Appelez le sous avec un premier & Sigil. & subroutine_name ();

      Y at-il d'autres cas intéressants que j'ai manqué?

      udpate:

      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é.

      @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.


3 commentaires

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?


3 Réponses :


12
votes

Appelez-le via une référence de sous-programme.

foo();
sub foo($) { print "arg is $_[0]\n" }


3 commentaires

Fait intéressant, prototype d'impression ($ SUB), "\ n"; 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.



3
votes

Utilisation du goto & nom Syntaxe.


0 commentaires

3
votes

type-glob. xxx pré>

aussi, considérez la barre-> foo () réécrite en notation indirecte: p>

foo Bar


0 commentaires