=编码utf8=供评论此文件的一致格式通过以下方式实现:珀尔/移植/podtiy pod/perlhack.pod=头1名称perlhack-如何破解Perl=头1描述本文档解释了Perl开发的工作原理。它包括详细信息关于Perl 5 Porters电子邮件列表、Perl存储库、Perl错误跟踪器、补丁指南和Perl开发评论哲学。=head1超级快速补丁指南如果你只想提交一个小补丁,比如pod补丁,那么测试对于bug、评论修复等,这很容易!方法如下:=大于4=项*签出源存储库perl源代码位于git存储库中。您可以克隆存储库使用以下命令:%git克隆https://github.com/Perl/perl5.git珍珠=项目*确保您遵循最新建议如果最近更新了本指南中的建议,请阅读直接来自perl源代码的最新版本:%perldoc pod/perlhack.pod=项*为您的更改创建分支基于blead创建一个分支以提交您的更改,这将稍后用于将其发送到Perl问题跟踪器。%git结帐-b mychange=项目*做出改变黑客,黑客,黑客。请记住,Perl运行在许多不同的平台,不同的操作系统具有不同的功能、不同的文件系统组织,甚至不同字符集。L(左)对此提出建议。=项*测试您的更改您可以使用以下命令运行所有测试:% ./配置-des-Dusedevel%进行测试继续黑客攻击,直到测试通过。=项*提交更改提交您的工作将保存更改I:%git commit-a-m'在此处提交消息'确保提交消息在单个句子。例如,“修复了perlhack.pod中的拼写错误”。=item*将您的更改发送到Perl问题跟踪器下一步是将补丁提交到Perl核心票证系统。创建perl5存储库的GitHub分支,并将其添加为远程,如果您还没有,如GitHub文档中所述L(左).%git远程添加分叉git@github.com:MyUser/perl5.git有关更多信息,请参阅L<“使用SSH连接到GitHub”|https://docs.github.com/en/free-pro-team@最新的/github/authentication-to-github/connection-to-github-with-ssh>。如果您更愿意为您的C使用HTTPS URL请参阅L<“克隆HTTPS URL“|https://docs.github.com/en/free-pro-team@最新的/github/using-git/which-remote-url-should-i-use#cloning-with-https-urls>。%git远程添加分叉https://github.com/MyUser/perl5.git然后,把你的新树枝推到叉子上。%git推-u叉mychange最后,在GitHub上从分支创建一个Pull请求,以作为GitHub文档中描述的L(左).=项目*谢谢搬运工很感激您花时间帮助改进Perl。谢谢您!=项目*确认所有贡献者都会在AUTHORS文件,它是perl发行版的一部分,以及Git提交历史记录。如果你不想被包含在AUTHORS文件中,就让我们来吧知道了。否则,我们将接受您提交的补丁作为许可将您记入AUTHORS文件。=项目*下次下次您希望进行修补时,需要从处于原始状态的最新perl。检查您没有任何本地更改或者在您的perl签出中添加您希望保留的文件,然后运行这些命令:%git校验失败%吉特拉力%git重置—硬原点/blead%git清洁-dxf=背面=head1错误报告如果您想报告Perl中的错误,或者浏览现有的Perl错误并补丁程序,请使用GitHub问题跟踪器L(左).请检查perl5-porters列表的存档(见下文)和/或提交错误报告之前的错误跟踪系统。通常,你会发现该错误已被报告。您可以登录漏洞跟踪系统并对现有漏洞发表评论报告。如果您有关于现有错误的其他信息,请加上它。这将有助于搬运工修复这个错误。=head1 PERL 5波特perl5-porters(p5p)邮件列表是Perl标准的所在保持和发展分销。维护Perl的人也被称为“Perl 5 Porters”、“p5p”或“搬运工”。列表的可搜索存档可在L(左)。还有一个存档位置L(左).=head2 perl更改邮件列表perl5-changes邮件列表接收每个获得提交给perl的维护和开发分支存储库。参见L对于订阅和存档信息。=IRC上的头2#p5p许多搬运工在L上也很活跃频道。欢迎加入频道并询问有关黑客攻击的问题Perl内核。=head1获取PERL源Perl的所有源代码都集中保存在Git存储库中。该存储库包含许多Perl修订版从Perl 1开始,以及Perforce的所有修订版本控制系统。有关在Perl存储库中使用git的更多详细信息,请参阅L(左).=head2通过Git读取访问您的计算机需要Git的副本。你可以取一份使用git协议的存储库:%git克隆git@github.com:Perl/perl5.git-Perl这将克隆存储库并在F中制作本地副本目录。如果由于防火墙原因无法使用git协议,您还可以通过http克隆:%git克隆https://github.com/Perl/perl5.git珍珠=head2通过web读取访问您可以通过web访问存储库。这允许您浏览树,请参阅最近的提交,订阅存储库通知,搜索特定提交等。您可以访问L(左).=head2通过git进行写访问如果您有提交位,请参阅L有关的更多详细信息使用git。=头部1修补性能如果你计划做更多的工作,而不是一个小修复,我们鼓励您阅读以下文档。这对你有帮助专注于您的工作,使您的补丁更容易融入Perl源代码。=head2提交补丁如果你有一个小补丁需要提交,请通过GitHub提交拉取请求工作流。您也可以将补丁发送到p5p列表。在GitHub或p5p列表上审查和讨论补丁。很简单,无争议的补丁通常会在没有任何讨论的情况下使用。应用修补程序后,票据将被更新,您将接收电子邮件。在其他情况下,补丁需要更多的工作或讨论。我们鼓励您参与讨论并倡导你的补丁。有时你的补丁可能会在洗牌中丢失。它是如果没有采取任何行动,可以向p5p发送提醒电子邮件一个月后。请记住,Perl 5开发人员都是志愿者,礼貌待人。更改总是直接应用于主开发分支,被称为“blead”。某些修补程序可能会向后移植到维护分支。如果您认为您的补丁适合维护支管(见L),请解释原因当你提交时。=head2正在接受补丁如果你要提交一个代码补丁,你需要做以下几件事可以帮助Perl 5 Porter接受您的补丁。=head3补丁样式使用GitHub Pull Request工作流,您的补丁将自动以合适的格式提供。如果您希望向提交修补程序要查看的p5p列表,请确保适当地创建它。如果使用git检查Perl源代码,则使用C将以适合Perl的样式生成补丁。这个C类命令为您每次提交生成一个修补程序文件制造的。如果您喜欢为所有提交发送单个补丁,您可以使用C.%git校验失败%吉特拉力%git差异显示my-branch-name这将根据blead和您的当前分支。确保blead是最新的很重要在生成diff之前,这就是为什么我们称之为C第一。如果可能,我们强烈建议您使用git。它会让你生活更轻松,我们也一样。然而,如果不使用git,仍然可以生成合适的补丁。您需要一个Perl源代码的原始副本来进行比较。搬运工更喜欢统一的差异。使用GNU C,您可以生成差异如下:%差异-Npurd秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁秘鲁确保你在您的Perl副本中删除任何构建工件,否则您可能会得到令人困惑的结果。=head3提交消息当您编写要提交给Perl内核的每个补丁时写一条好的提交消息很重要。这一点尤其重要如果您的提交将包含一系列提交。提交消息的第一行应该是简短的描述没有句点。它不应长于电子邮件,50个字符是一个很好的经验法则。许多Git工具(Gitweb、GitHub、Git-log--pretty=oneline,…)将演示时仅显示第一行(在50个字符处截断)提交摘要。提交消息应包括对问题的描述修补程序更正或修补程序添加的新功能。一般来说,提交消息应该有助于了解Perl核心的程序员很快就会理解您是什么样的人试着去做,你是怎么做的,为什么改变很重要到Perl。=大于4=项目*为什么您的提交消息应描述您所做更改的原因重要。当有人在六个月或六个月后看到你的变化时多年来,你的意图应该很清楚。如果为了以后简化而不推荐某个功能再写一段代码。如果你正在解决性能问题或添加一个新特性以支持其他一些核心那个。=项目*什么提交消息应该描述您是Perl核心的哪一部分以及你希望补丁做什么。=项目*如何虽然文档更改、新测试或琐碎的补丁,通常值得解释一下您的更改是如何工作的。即使你今天清楚了,下一个搬运工也可能不清楚月或明年。=背面提交消息不是用来代替你的评论代码。提交消息应该描述您所做的更改,而代码注释应该描述代码的当前状态。如果您刚刚实现了一个新功能,则需要完成文档、测试和注释良好的代码,一条简短的提交消息通常就足够了。如果,然而,您只是在解析器中更改了一个字符,或者莱克斯,你可能需要写一本小小说来确保未来读者理解你做了什么以及为什么这么做。=head3评论、评论、评论确保充分注释代码。评论每一行没有必要,任何利用运营商,这会带来外部感受到的变化正在修补的功能或其他人可能会感到困惑的功能应该是记录在案。如果你要犯错,最好是偏误评论太多而不是太少。最好的评论解释了我代码做它做的事,而不是我.=头3样式一般来说,请遵循您的特定代码样式修补。特别是,请遵循以下关于修补Perl的一般准则来源:=大于4=项目*代码为4宽缩进,嵌套CPP C为2宽缩进,带有8宽止动块。=项目*缩进时使用空格,而不是制表符。代码库是用于缩进的制表符和空格的混合,我们仅移动到空格。转换8宽的配线制表符到空格将有助于此迁移。=项目*尽量不要超过79列一般来说,我们的目标是80列行。当坚持80列时对于折磨人的代码或返工,延长时间也没关系。尽量保持多余超过80至最低。=项目*ANSI C原型=项目*用于缩进控件构造的未混淆的else和“K&R”样式=项目*没有C++样式(//)注释=项目*用XXX标记需要重访的地方(并且经常重访!)=项目*当条件跨越多行时,左大括号与“if”对齐;否则应在直线的末尾=项目*在函数定义中,名称从列0开始(返回值类型为on上一行)=项目*后面跟parens的关键字后面只有一个空格,没有空格在函数名和后面的paren之间=项目*避免使用条件句赋值,但如果它们是不可避免的,则使用额外paren,例如“if(a&&(b=c))…”=项目*“return foo;”而不是“returns(foo);”=项目*“如果(!foo)…”而不是“如果(foo==FALSE)…”等。=项目*不要使用“register”声明变量。这可能会适得其反使用现代编译器,在C++中不推荐使用,在这种情况下,Perl源代码是定期编译的。=项目*XS代码可以访问的标头中的内联函数需要能够在没有警告的情况下使用常用的额外编译标志,例如gcc的C<-Wswitch-default>,它发出警告只要switch语句没有“默认”情况。使用这些额外的标志用于捕获合法C代码中的潜在问题,并且Perl聚合器(如Linux分发服务器)经常使用。=背面=head3测试套件如果补丁程序更改了代码(而不仅仅是更改文档),您还应该包括一个或多个说明错误的测试用例您正在修复或验证添加的新功能。通常,您应该更新现有的测试文件,而不是创建一个新的。您的测试套件添加通常应遵循以下准则(由古鲁萨米·萨拉西提供):=大于4=项目*知道你在测试什么。阅读文档和源代码。=项目*倾向于失败,而不是成功。=项目*严格解释结果。=项目*使用不相关的功能(这将消除奇怪的交互)。=项目*使用非标准的习惯用法(否则您不是在测试TIMTOWTDI)。=项目*尽可能避免使用硬编码测试编号(预期/GOT在t/op/tie中可以找到。t更易于维护,并且提供更好的故障报告)。=项目*当测试失败时,给出有意义的错误消息。=项目*避免使用qx//和system(),除非您正在测试它们。如果你一定要使用它们,确保涵盖所有perl平台。=项目*取消链接您创建的任何临时文件。=项目*使用$SIG{__WARN__}将意外警告升级为错误。=项目*请确保使用随版本一起提供的库和模块测试,而不是那些已经安装的。=项目*向代码中添加注释,解释您正在测试的内容。=项目*不需要更新“1..42”字符串。或者确保你更新它。=项目*测试给定运算符、库或函数的所有行为(_a)。测试所有可选参数。在各种上下文(布尔、标量、列表、左值)中测试返回值。同时使用全局变量和词法变量。不要忘记那些特殊的病理病例。=背面=head2修补核心模块这就像修补任何其他东西一样,只需要一个额外的对价。F中的模块维护源树的目录在Perl核心之外。当作者更新模块时更新只是复制到核心中。查看该模块文件或其在L上的清单了解更多信息有关报告错误和提交修补程序的信息。在大多数情况下,F中模块的补丁应发送到上游并且不应单独应用于Perl内核。如果修补程序F格式的文件绝对不能等待修复上游,发布到CPAN并复制到blead,您必须添加(或更新)a CF中的条目文件标记已进行局部修改。请参见F类了解更多详细信息。相反,F中的模块目录保存在核心。=head2更新perldelta对于足以保证F的重大变化条目,如果您提交一份delta报关单,搬运工将不胜感激以及您的实际零钱。重大变化包括,但不限于:=大于4=项目*添加、弃用或删除核心功能=项目*添加、弃用、删除或升级核心或双寿命模块=项目*添加新的核心测试=项目*修复核心中的安全问题和用户可见的错误=项目*可能在perl或C级别破坏现有代码的更改=项目*显著的性能改进=项目*在中添加、删除或显著更改文档F类目录=项目*特定于平台的重要更改=背面请确保将perldelta条目添加到右侧部分F以内。关于如何写得好的更多信息perldelta条目在C中可用