2016-06-24 4 views
2

リクエストトラッカー(RT)チケット作成ツールをカスタマイズしています。 SimpleSearchサブルーチンから返された値にある特別なフィルタをRT::Usersに追加します。Perlフック:: LexWrapポストラッパーメソッドの戻り値にアクセスできません

Hook :: Lexwrapコードに続いて、上記のサブルーチンの戻り値と引数にアクセスするように記述しました。

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; 

次の出力である:ここでは、戻り値(/opt/requestTracker/sbin/../local/lib/RT/Users_Localにアクセス

。 pm:6)

なぜ$ _ [ - 1]に空の値が存在するのか理解できません。 [ - 1]。包まれたサブルーチンによって生成戻り値 が含まれているスカラリターン コンテキストでは、この値は以下の

は、ポストのラッパー、$ _にhttp://search.cpan.org/~ether/Hook-LexWrap-0.25/lib/Hook/LexWrap.pm

から引用テキストですスカラー戻り値 リスト戻りコンテキストでは、この値は戻り値の配列 への参照です。$ _ [ - 1]は ポストラッパーに割り当てられ、これに応じて戻り値が変更されます "

元のサブルーチンから戻り値にアクセスするにはどうすればよいですか?どんな助けもありがとうございます。ありがとう

答えて

1

私はHook :: LexWrap perldocからサンプルコードをテストし、ラップされたサブルーチンがvoidコンテキストで呼び出されたときにのみ$ _ [ - 1]が未定義であることを発見しました。 したがって、サブルーチンの戻り値をある変数に代入するようにしてください。

+0

ありがとうございました。呼び出されたサブルーチンから返された値を呼び出し元サブルーチンの変数に代入すると、それが解決されました。 – lazilyInitialised

関連する問題