2

我们正在定制 Request Tracker (RT) 票务工具。SimpleSearch我们想为从 中的子程序返回的值添加某些额外的过滤器RT::Users

遵循我们编写的 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] 可以在后包装器中分配,这会相应地更改返回值。”

如何访问原始子程序的返回值?任何帮助表示赞赏。谢谢

4

1 回答 1

1

我测试了来自 Hook::LexWrap perldoc 的示例代码,发现 $_[-1] 只有在 void 上下文中调用包装子例程时才未定义。因此,请确保将子程序的返回值分配给某个变量。

于 2016-06-25T20:54:42.497 回答