我正在试图修补(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,但我更喜欢更简洁的猴子修补方法.同意成年人和你有什么.;-)
是否有可能重新定义_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)