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===
3 Réponses :
si $ ref code> est une méthode (attente
auto code> comme premier argument) et vous souhaitez l'appeler sur
Votre
auto code>, la syntaxe est la suivante:
La chose importante à noter dans ce style d'appel est que auto code> 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 code> et
$ auto code> est simplement passé en tant que $ Ref's 'Premier argument. Contraste ceci à si
$ ref code> était simplement le nom d'une méthode, auquel cas nous commencerions à rechercher cette méthode sur
$ auto code>, 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 i>, où les réponses sont votées en fonction de leur contenu, et non par une personne qui l'a affiché.
tmtowtdi
définissant une référence de fonction: strong> p> Dérarférence: strong> p> $ref->(@args);
&$ref;
&{$ref}(@args);
Utilisez ce qui suit: 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);