伦敦Perl和Raku研讨会将于2024年10月26日举行。如果您的公司依赖Perl,请考虑赞助和/或参加.
“简单的方法总是被挖掘出来。重要的事情总是简单的。简单的事情总是很难。"--墨菲战斗定律这是一套简短的指导方针,适用于那些做出贡献的人ExtUtils::MakeMaker。这不是一套铁皮规则,只是在阅读和集成补丁时使生活更容易的东西。报告Bug-通常,我们拥有的用于修复错误的唯一信息包含在您的报告。所以。。。-请通过报告您的错误http://rt.cpan.orghttps://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker/issues通过邮寄至makemaker@perl.org。首选RT或GitHub。-遇到错误时请立即报告。不要等待直到你有补丁来修复这个错误。补丁很好,但不适合及时报告错误的费用。-请尽可能详细。包括的完整输出您的“make test”或甚至“make test test_VERBOSE=1”以及生成了Makefile。错误在于冗长。我们获得的数据越多必须处理,我们诊断问题的速度就越快。-如果您发现未记录的功能,或功能已更改/已更改添加了导致问题的内容,请报告。不要认为已完成故意的。即使这是故意的,我们仍然希望听到如果它引起了问题。-如果您正在针对Perl的开发版本测试MakeMaker,请根据最新的稳定版本进行检查。这就是原因更容易判断出是MakeMaker还是Perl出了问题。Pull请求-如果您已经编写了修补程序,请在GitHub上请求Pull。-根据GitHub的最新开发快照拉取请求首选存储库。-针对最新CPAN版本的Pull Request也可以。代码格式-没有文字标签(显然,Makefile代码中必要的地方除外)。-4个字符缩进。-首选this_style而不是studlyCaps。-专用子例程名称(即仅在同一个包中使用的子例程名称它们在中声明)应该以下划线(sekretmethod)开头。-受保护的子程序(即计划由中的其他模块使用的子程序ExtUtils::*)应正常命名(没有前导下划线),但记录为受保护(参见下面的文档)。-不要使用间接对象语法(即new Foo::Bar(@args))-make变量使用像Perl标量这样的美元符号。这会导致问题当你必须把两者混合在一起时。如果你发现自己倒退很多美元符号,因为你有一个插入perl变量,如下所示:返回<<EOT;细分::\$(NOECHO)cd$subdir&&\$(MAKE)-f\$(FIRST_MAKEFILE)all\$(PASTHRU)EOT公司或者正在切换引用上下文:返回q{细分::$(NOECHO)cd}$subdir.q{&&$(MAKE)-f$(FIRST_MAKEFILE)all$(PASTHRU)};考虑改用sprintf。return sprintf<<'EOT',$subdir;细分::$(NOECHO)cd%s&&$(MAKE)-f$(FIRST_MAKEFILE)all$(PASTHRU)EOT公司重构和清理-MakeMaker一团糟。我们喜欢清洁东西的补丁。向后兼容性-MakeMaker必须向后兼容5.6.2。避免任何明显的5.8-isms。-MakeMaker应避免具有模块依赖性。但如果新代码需要完全依赖于模块,它将捆绑模块。请参见生成文件。ExtUtils的PL::MakeMaker了解详细信息。跨平台兼容性-MakeMaker必须适用于Perl所使用的所有体系结构(请参阅perlport.pod)。这意味着所有Unixen(包括Cygwin和MacOS X)、Windows和VMS。-使用可用的宏而不是shell命令$(MV)、$(CP)、,$(触摸)等。。。-MakeMaker必须在多个品牌上工作。GNU、BSD、Solaris、nmake、dmake、MMS和MMK来命名最常见的。使make代码保持简单可能。-避免特殊的make变量(甚至$@)。-将目标格式设置为“target:dependency”,间距很重要。-使用$(NOECHO)代替@。-使用-告诉make忽略命令的退出代码。(不幸的是,一些make变体不支持$(IGNORE)宏)。-始终在$(NOECHO)和命令之间放置空格。-始终在-(忽略)和命令之间留一个空格。-始终将$(NOECHO)和-放在一起,它们之间没有空格。#右侧-$(NOECHO)命令$(NOECHO)命令-命令-通常在修补ExtUtils::MM_Unix时,必须执行类似的修补程序连接到其他MM_*模块。如果可以的话,请做这个额外的工作否则我不得不。如果你不能,没关系。我们可以帮忙。-如果可能,请在两个非常不同的体系结构上测试您的补丁。Unix、Windows和VMS非常不同。注:Cygwin和OS X是Unixen用于我们的目的。-如果没有别的,至少在两台不同的Unixen机器上试试(即Linux和OS X)。-如果您发现自己在写“do_this If$^O eq‘That’”(即检查操作系统类型)可能您的代码属于非Unix MM之一_*模块(即MM_Win32、MM_VMS等)。如果不存在,请考虑创建一个。只有一个方法的MM_*模块是可以的。-一些外壳具有非常小的缓冲区。这意味着命令行必须尽可能小。如果命令太长,请考虑使其成为ExtUtils::Command::MM函数。如果你的命令可能接收许多参数(例如pod2man或pmto_blib),请考虑使用split_command()将其拆分为几个较短的调用。-大多数炮弹的报价都不同。如果您需要使用perl单行程序在Makefile中,请使用oneliner()生成它。测验-测试会很好,但我不会假装测试MakeMaker很容易。如果没有其他内容,请告诉我们您是如何测试补丁的手。不过,如果你能改进测试,它确实对每个人都有帮助!-特拉维斯CI(https://travis-ci.org)是很好的测试来源许多perl版本的机器。账户是免费的。文档-文档会很好。-如果新功能/方法是私有的,请用POD记录包装在“=begin/end-private”标记中。这样它就会被记录下来,但不会显示(未来版本的perldoc可能有选项以显示)。=开始私有=头部3_foo_bar$mm->_foo_bar废话废话=结束私有=切割子_工具栏{...-如果要重写一个方法,请记录它是一个重写,并*为什么,它被覆盖了。不要重复原始文档。