我有一个能够定义凭证的类。从类子例程中覆盖模块子例程
$po = PoService->new()->set_basicauth("jack", "secret");
事情是,为了做到这一点,它必须重新定义模块子程序。所以,我就是这么做的:
sub set_basicauth {
my ($self, $creds_username, $creds_password) = @_;
sub SOAP::Transport::HTTP::Client::get_basic_credentials {
return $creds_username => $creds_password;
}
return $self;
}
但是,当我运行的代码,它告诉我一个消息:
Variable "$creds_username" will not stay shared at /opt/PoService.pm line 53.
Variable "$creds_password" will not stay shared at /opt/PoService.pm line 53.
我干了什么错在这里做什么?
谢谢@zdim。我已经将解决方案修正为一个工作。 – sancho21
@ sancho21伟大的:)。感谢您的建议编辑。但是,声明'我的'变种是另一回事。它引入了一个词法,在这种情况下它是全球性的(无论如何,在更大的范围内)。如果你再引用它('$ var'),它就是_that_词法,而不是'$ main :: var' - 你必须调用'$ main :: var'。 '$ main :: var'在符号表中创建一个条目(而'my $ var'没有)。在完全合格时不需要声明它们(如果它不起作用,那肯定是另一个原因)。我会添加一些评论或链接(但后来,现在已经太晚了)。 – zdim
@ikegami谢谢你的改进(编辑) – zdim