Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl:CPAN-模块修改和添加功能_Perl_Module_Cpan - Fatal编程技术网

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

Perl:CPAN-模块修改和添加功能,perl,module,cpan,Perl,Module,Cpan,我找到了一个我想改变的模块 我的问题有如下特点: 我想向该模块添加功能和灵活性 现在这个模块解决了任务,但是web服务,对于它编写的内容,改变了API 同时,我想使用这个模块的代码 它不是我的模块 修正一些错误 在这种情况下我该怎么办 是否继承此模块并添加功能并上载到CPAN 询问作者我的修改(和重新加载模块) 还有别的吗 我认为你的a和b选项几乎是最好的方法——尽管我可能会反过来做 向模块作者提出建议。阅读模块 了解作者希望如何与之联系的文档。一些 像电子邮件,有的像,有的有更具体的方法

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

我的问题有如下特点:

  • 我想向该模块添加功能和灵活性
  • 现在这个模块解决了任务,但是web服务,对于它编写的内容,改变了API
  • 同时,我想使用这个模块的代码
  • 它不是我的模块
  • 修正一些错误
在这种情况下我该怎么办

  • 是否继承此模块并添加功能并上载到CPAN
  • 询问作者我的修改(和重新加载模块)
  • 还有别的吗
我认为你的a和b选项几乎是最好的方法——尽管我可能会反过来做

  • 向模块作者提出建议。阅读模块 了解作者希望如何与之联系的文档。一些 像电子邮件,有的像,有的有更具体的方法。 作者倾向于更喜欢建议,如果这些建议带有测试 可自由应用的新/更改代码和修补程序。也许 代码在Github上。你能用叉子把它叉起来,做些改变,然后把它寄出去吗 作者提出了一个请求

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


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

    • 作为,向上游发送修复程序或成为该项目的一部分。听起来你有成为一名重要贡献者的雄心。:)
    • 创建一个子类来替换方法
    • 重写或重载子例程或方法
    • 包装子程序以修改或调整输入或输出(例如)
    • 创建一个本地补丁版本,并将其与主代码分开存储,这样它就不会在升级中消失
    例如,这是我在等待上游修复时经常直接在程序代码中执行的操作:

    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 ... };
         }
       }
    
    使用Some::Module;#首先加载原始文件
    开始{
    包Some::模块;
    没有“重新定义”的警告;
    如果($VERSION>1.23和$VERSION<1.45){
    *断开=子{…固定版本…};
    }
    }
    

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

    您能告诉我们它是哪个模块吗?VK模块()