【问题标题】:Perl Hook::LexWrap Unable to access return value in post wrapper methodPerl Hook::LexWrap 无法访问后包装方法中的返回值
【发布时间】:2016-10-26 19:36:13
【问题描述】:

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

按照我们编写的 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] 可以分配给 post-wrapper,这会相应地改变返回值。”

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

【问题讨论】:

    标签: perl rt


    【解决方案1】:

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

    【讨论】:

    • 谢谢。将从被调用的子例程返回的值分配给调用者子例程中的变量解决了它。
    猜你喜欢
    • 2023-03-07
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多