10
votes

Comment écrire une référence de fonction dans un module PERL?

J'essaie de comprendre comment faire un travail de référence de fonction pour un module PERL. Je sais comment le faire en dehors d'un module, mais à l'intérieur d'un? Considérez le code comme celui-ci:

==mymodule.pm==
1 sub foo { my $self = shift; ... }
2 sub bar { my $self = shift; ... }
3 sub zip {
4   my $self = shift;
5   my $ref = \&foo;
6   $self->&$foo(); # what syntax is appropriate?
7 }
==eof===


0 commentaires

3 Réponses :


9
votes

si $ ref est une méthode (attente auto comme premier argument) et vous souhaitez l'appeler sur Votre auto , la syntaxe est la suivante: xxx


3 commentaires

La chose importante à noter dans ce style d'appel est que auto n'est pas utilisé pour déterminer quelle méthode à appeler (comme c'est le cas lors de l'appel d'une méthode OO-style) - La méthode est déterminée uniquement De $ Réf et $ auto est simplement passé en tant que $ Ref's 'Premier argument. Contraste ceci à si $ ref était simplement le nom d'une méthode, auquel cas nous commencerions à rechercher cette méthode sur $ auto , puis sur l'arbre de héritage.


@Jonathan: Ne tournons pas si [Perl] dans un groupe de groupies salivantes .. Les fanboys de Skeet Jon sont assez mauvais. : /


J'ai un rêve , où les réponses sont votées en fonction de leur contenu, et non par une personne qui l'a affiché.



23
votes

tmtowtdi

​​ définissant une référence de fonction: strong> p> xxx pré>

Dérarférence: strong> p>

$ref->(@args);
&$ref;  
&{$ref}(@args);


0 commentaires

7
votes

Utilisez ce qui suit: xxx pré>

avec cette syntaxe, $ ref code> peut être une référence à un sous-programme ou même une chaîne avec le nom de la méthode à appeler , par exemple em>, p>

$self->$ref($arg1, \%arg2, @others);


0 commentaires