我找到了一个我想更改的模块。
我的问题有一些这样的特点:
- 我想为这个模块添加功能和灵活性。
- 现在这个模块解决了任务,但是 web 服务,对于它所写的,改变了 API
- 而且,我想使用这个模块的代码。
- 这不是我的模块
- 修复一些错误
在这种情况下我应该如何?
- 继承此模块并添加功能并上传到 CPAN?
- 向作者询问我的修改(和重新加载模块)?
- 还有什么?
有多种方法可以在您使用模块时对其进行修改,我在Mastering Perl中介绍了其中的大部分。
例如,这是我在等待上游修复时经常直接在程序代码中执行的操作:
use Some::Module; # load the original first
BEGIN {
package Some::Module;
no warnings 'redefine';
if( $VERSION > 1.23 and $VERSION < 1.45 ) {
*broken = sub { ... fixed version ... };
}
}
这样,即使升级了目标模块,我也可以修复。
我认为您的 a 和 b 选项几乎是最好的方法 - 尽管我可能会反过来做。
向模块作者提出您的建议。阅读模块文档以了解作者喜欢如何联系。有的喜欢 email,有的喜欢RT,还有的有更具体的方法。如果作者对可以自由应用的新/更改代码和补丁进行测试,他们往往会更喜欢建议。也许代码在 Github 上。你可以分叉它,进行更改并向作者发送拉取请求吗?
如果作者没有反应,那么考虑分叉或子类化他们的代码。在这种情况下,命名很重要,因为您希望人们能够找到您的模块以及原始模块。您还需要仔细记录您的版本与原始版本之间的差异,以便人们可以选择他们想要的版本。