相关疑难解决方法(0)

我怎样才能在Perl中修补实例方法?

我正在试图修补(duck-punch :-)一个LWP::UserAgent实例,如下所示:

sub _user_agent_get_basic_credentials_patch {
  return ($username, $password);
}

my $agent = LWP::UserAgent->new();
$agent->get_basic_credentials = _user_agent_get_basic_credentials_patch;
Run Code Online (Sandbox Code Playgroud)

这不是正确的语法 - 它产生:

无法在[module] line [lineno]修改非左值子程序调用.

我记得(来自Programming Perl),调度查找是基于受祝福的包动态执行的(ref($agent)我相信),所以我不确定实例猴子修补如何在不影响受祝福的包的情况下工作.

我知道我可以继承它UserAgent,但我更喜欢更简洁的猴子修补方法.同意成年人和你有什么.;-)

perl monkeypatching

22
推荐指数
4
解决办法
5345
查看次数

是否可以重新定义子程序以便为代码的一部分进行本地化?

是否有可能重新定义_function_used_by_exported_function唯一的exported_function呼叫second_routine

#!/usr/bin/env perl
use warnings; 
use strict;
use Needed::Module qw(exported_function);


sub first_routine {
    return exported_function( 2 );
}

no warnings 'redefine';

sub Needed::Module::_function_used_by_exported_function {
    return 'B';
}

sub second_routine {
    return exported_function( 5 );
}

say first_routine();
say second_routine();
Run Code Online (Sandbox Code Playgroud)

perl module redefine subroutine

1
推荐指数
1
解决办法
166
查看次数

标签 统计

perl ×2

module ×1

monkeypatching ×1

redefine ×1

subroutine ×1