2016-06-24 50 views
2

我們正在自定義請求跟蹤器(RT)票務工具。我們想要在RT::UsersSimpleSearch子例程中返回一些額外的過濾器。Perl Hook :: 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]中存在空值。

以下是http://search.cpan.org/~ether/Hook-LexWrap-0.25/lib/Hook/LexWrap.pm

報價在-包裝後的文本,$ _ [ - 1]包含由包裹子程序產生的返回值 在一個標量返回 背景下,這個值。在 列表返回上下文中,該值是對返回值數組 的引用。$ _ [ - 1]可能被分配給 後封裝器,並且這會相應地更改返回值 「。

如何從原始子程序訪問返回值?任何幫助表示讚賞。謝謝

回答

1

我測試了來自Hook :: LexWrap perldoc的示例代碼,並發現$ _ [ - 1]僅在包裝子例程在無效上下文中調用時纔是未定義的。 因此,請確保您將子例程的返回值分配給某個變量。

+0

謝謝。將調用子例程返回的值分配給調用者子例程中的一個變量解析它。 – lazilyInitialised