3

我找到了一个我想更改的模块。

我的问题有一些这样的特点:

  • 我想为这个模块添加功能和灵活性。
  • 现在这个模块解决了任务,但是 web 服务,对于它所写的,改变了 API
  • 而且,我想使用这个模块的代码。
  • 不是我的模块
  • 修复一些错误

在这种情况下我应该如何?

  • 继承此模块并添加功能并上传到 CPAN?
  • 向作者询问我的修改(和重新加载模块)?
  • 还有什么?
4

2 回答 2

8

有多种方法可以在您使用模块时对其进行修改,我在Mastering Perl中介绍了其中的大部分。

  • 正如Dave Cross 提到的,将修复发送到上游或成为该项目的一部分。听起来你有成为重要贡献者的雄心。:)
  • 创建一个子类来替换方法
  • 覆盖或重载子例程或方法
  • 包装子程序以修改或调整输入或输出(例如Hook::LexWrap
  • 创建一个本地补丁版本,并将其与主代码分开存储,这样它就不会在升级中消失

例如,这是我在等待上游修复时经常直接在程序代码中执行的操作:

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 ... };
     }
   }

这样,即使升级了目标模块,我也可以修复。

于 2012-07-28T16:00:14.943 回答
3

我认为您的 a 和 b 选项几乎是最好的方法 - 尽管我可能会反过来做。

  1. 向模块作者提出您的建议。阅读模块文档以了解作者喜欢如何联系。有的喜欢 email,有的喜欢RT,还有的有更具体的方法。如果作者对可以自由应用的新/更改代码和补丁进行测试,他们往往会更喜欢建议。也许代码在 Github 上。你可以分叉它,进行更改并向作者发送拉取请求吗?

  2. 如果作者没有反应,那么考虑分叉或子类化他们的代码。在这种情况下,命名很重要,因为您希望人们能够找到您的模块以及原始模块。您还需要仔细记录您的版本与原始版本之间的差异,以便人们可以选择他们想要的版本。

于 2012-07-28T09:04:26.793 回答