J'essaie de trouver une solution générale pour obtenir une référence à une méthode dans un module. Supposons que nous avons un module Hello.pm avec une seule méthode appelée "bonjour".Référence à une méthode dans un package
Dans un programme appelant, on pourrait écrire
use Hello;
Hello->hello('Hi There');
Le module est défini comme:
package Hello;
sub hello {
my $object=shift;
my $greeting=shift;
say "$greeting";
return;
}
1;
Comment puis-je obtenir une référence de code à mon test du module de bonjour? Finalement, je veux construire une table d'expédition et être capable de le charger avec n'importe quel nombre de méthodes situées dans d'autres modules.
Cela ne fonctionne pas:
my $code_ref=&{Hello->hello}
et invoquer comme ceci:
$code_ref->('Hi There');
Toutes les idées? Merci!
Malheureusement, cela ne fonctionne pas. Lorsque le sous-marin se trouve dans le même module ou le même programme d'appel, c'est simple: $ code_ref = & hello et pour exécuter je lancerais $ code_ref -> {$ argument) –
Je vous assure que c'est le cas. 'my $ code_ref = sub {Bonjour-> Bonjour (@_)}; $ code_ref -> ('Hi There'); 'fera la même chose que' Hello-> bonjour ('Hi There'); '. – ikegami
OK. Le problème que j'ai est que lors de l'obtention d'un code_ref, l'appel doit inclure le nom de l'objet. Donc $ code_ref = & Hello :: hello et ensuite l'appel est $ code_ref -> ('Bonjour', $ argument). Sans code_ref, le nom de l'objet est implicitement passé. Malheureusement, je n'ai pas réussi à faire fonctionner votre format. Je dois faire quelque chose de mal. –