Perl:CPAN - 模块修改和添加功能

时间:2012-07-28 07:18:32

标签: perl module cpan

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

我的问题有一些这样的功能:

  • 我想为此模块添加功能和灵活性
  • 现在这个模块解决了任务,但是Web服务,就其编写的内容而言,更改了API
  • 而且,我想使用这个模块的代码。
  • 我的模块
  • 修复一些错误

我应该如何处于这种情况?

  • 继承此模块并添加功能并上传到CPAN?
  • 询问作者我的修改(和重装模块)?
  • 别的什么?

2 个答案:

答案 0 :(得分:6)

在使用模块时,有多种方法可以修改模块,我在Mastering Perl中涵盖了大部分模块。

  • 作为Dave Cross mentions,向上游发送修补程序或成为该项目的一部分。听起来你有野心成为一个重要的贡献者。 :)
  • 创建一个子类来替换方法
  • 覆盖或超载子程序或方法
  • 包装子程序以修改或调整输入或输出(例如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 ... };
     }
   }

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

答案 1 :(得分:3)

我认为你的a和b选项几乎是最好的方法 - 虽然我可能会反过来这样做。

  1. 根据您的建议与模块作者联系。阅读模块 文档,以了解作者是如何联系的。一些 像电子邮件,有些像RT,其他有更具体的方法。 如果他们提供测试,作者往往更喜欢建议 可以自由应用的新/更改的代码和补丁。也许 代码在Github上。你可以分叉,做出改变并发送 作者拉请求?

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