2016-06-24 4 views
2

Nous personnalisons l'outil de création de ticket Request Tracker (RT). Nous souhaitons ajouter certains filtres supplémentaires aux valeurs renvoyées par le sous-programme SimpleSearch au RT::Users. Après le code Hook :: Lexwrap, nous avons écrit pour accéder à la valeur de retour et aux arguments du sous-programme ci-dessus.Perl Hook :: LexWrap Impossible d'accéder à la valeur de retour dans la méthode post-wrapper

Users_Local.pm

package RT::Users; 
use strict; 
use Hook::LexWrap; 
wrap 'SimpleSearch' => 
    post=> sub { 
     RT::Logger->info("accessing return value here $_[-1]"); 
     RT::Logger->info("I got the arguments in post: [@_]"); 
    }, 
; 
1; 

Voici le résultat:

accéder à la valeur de retour ici (/opt/requestTracker/sbin/../local/lib/RT/Users_Local. pm: 6)

Je ne suis pas capable de comprendre pourquoi une valeur vide existe dans $ _ [- 1].

Voici le texte cité http://search.cpan.org/~ether/Hook-LexWrap-0.25/lib/Hook/LexWrap.pm

"Dans un post-emballage, $ _ [- 1] contient la valeur de retour produit par le sous-programme enveloppé dans un retour scalaire contexte, cette valeur est. la valeur de retour scalaire Dans un contexte de retour de liste , cette valeur est une référence au tableau de valeurs de retour . $ _ [- 1] peut être affecté dans un post-wrapper , et cela modifie la valeur de retour en conséquence "

Comment puis-je accéder à la valeur de retour à partir du sous-programme d'origine? Toute aide est appréciée. Merci

Répondre

1

J'ai testé l'exemple de code de Hook :: LexWrap perldoc et trouvé que $ _ [- 1] n'est indéfini que lorsque le sous-programme encapsulé est appelé dans un contexte vide. Donc, assurez-vous d'affecter une valeur de retour de votre sous-programme à une variable.

+0

Merci. L'attribution de la valeur renvoyée par le sous-programme appelé à une variable dans le sous-programme de l'appelant l'a résolu. – lazilyInitialised