您正在从Perl 5.14.1查看此文档的版本。查看最新版本
perlhack-如何破解Perl
本文档解释了Perl开发的工作原理。它包括关于Perl5Porters电子邮件列表、Perl存储库、Perlbug错误跟踪器、补丁指南和Perl开发理念的评论的详细信息。
#超级快速补丁指南
如果你只想提交一个小补丁,比如pod补丁、bug测试、评论补丁等等,那很容易!方法如下:
签出源存储库
perl源代码位于git存储库中。您可以使用以下命令克隆存储库:
%git克隆git://perl5.git.perl.org/perl.git珍珠
做出改变
黑客,黑客,黑客。
测试您的更改
您可以使用以下命令运行所有测试:
% ./配置-des-Dusedevel%进行测试
继续黑客攻击,直到测试通过。
提交您的更改
提交您的工作将保存更改在本地系统上:
%git commit-a-m'在此处提交消息'
确保提交消息用一句话描述您的更改。例如,“修复了perlhack.pod中的拼写错误”。
将您的更改发送到perlbug
下一步是通过电子邮件将补丁提交给Perl核心票证系统。
假设您的补丁由单个git提交组成,您可以使用以下命令行将其发送给perlbug:
%git格式-补丁HEAD ^1..HEAD%perlbug-s'[PATCH]`git log--pretty=格式:%s HEAD^1..HEAD`'-f 0001-*.PATCH
perlbug程序会问你几个关于你的电子邮件地址和你提交的补丁的问题。回答完后,您可以提交补丁。
谢谢你
搬运工很感激您花时间帮助改进Perl。谢谢您!
#BUG报告
如果您想报告Perl中的错误,您必须使用珍珠贝命令行工具。此工具将确保您的错误报告包含所有相关的系统和配置信息。
要浏览现有的Perl错误和修补程序,可以在以下位置使用web界面:http://rt.perl.org/.
在提交错误报告之前,请检查perl5-porters列表(见下文)和/或错误跟踪系统的存档。通常,您会发现该错误已被报告。
您可以登录到缺陷跟踪系统并对现有的缺陷报告进行评论。如果您有关于现有错误的其他信息,请添加它。这将有助于搬运工修复错误。
#PERL 5波特
perl5-porters(p5p)邮件列表是维护和开发Perl标准发行版的地方。维护Perl的人也被称为“Perl5搬运工”,或者只是“搬运工”。
列表的可搜索存档可在http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/。还有另一个存档位于http://archive.develooper.com/perl5-porters@perl.org网站/.
#perl-changes邮件列表
perl5-changes邮件列表接收提交给perl存储库的维护和开发分支的每个补丁的副本。请参见http://lists.perl.org/list/perl5-changes.html获取订阅和存档信息。
#获取PERL来源
Perl的所有源代码都集中保存在Git存储库中perl5.git.perl.org。该存储库包含从Perl 1开始的许多Perl修订版,以及以前版本控制系统Perforce的所有修订版。
有关在Perl存储库中使用git的更多详细信息,请参阅珍珠岩.
#通过Git读取访问
您的计算机需要Git的副本。您可以使用git协议获取存储库的副本:
%git克隆git://perl5.git.perl.org/perl.git珍珠
这将克隆存储库并在珍珠目录。
如果由于防火墙原因无法使用git协议,也可以通过http进行克隆,但速度要慢得多:
%git克隆http://perl5.git.perl.org/perl.gitperl语言
#通过web读取访问
您可以通过web访问存储库。这允许您浏览树、查看最近的提交、订阅RSS提要以获取更改、搜索特定提交等等。您可以访问http://perl5.git.perl.org/perl.git。存储库的镜像位于http://github.com/mirrors/perl.
#通过rsync读取访问
您还可以选择使用rsync为bleadperl分支和所有维护分支获取当前源树的副本:
%rsync-avzrsync://perl5.git.perl.org/perl-current .%rsync-avzrsync://perl5.git.perl.org/perl-5.12.x .%rsync-avzrsync://perl5.git.perl.org/perl-5.10.x .%rsync-avzrsync://perl5.git.perl.org/perl-5.8.x .%rsync-avzrsync://perl5.git.perl.org/perl-5.6.x .%rsync-avzrsync://perl5.git.perl.org/perl-5.005xx .
(添加--删除
选项删除剩余文件。)
要获取可用同步点的完整列表,请执行以下操作:
%rsync perl5.git.perl.org::
#通过git进行写访问
如果您有提交位,请参阅珍珠岩有关使用git的更多详细信息。
#修补PERL
如果您计划进行比单个小修复更广泛的工作,我们建议您阅读以下文档。这将帮助您集中精力工作,并使您的补丁更容易合并到Perl源代码中。
#提交修补程序
如果你有一个小补丁需要提交,请通过perlbug提交。您也可以直接向发送电子邮件perlbug@perl.org。请注意,发送到perlbug的消息可能保存在审核队列中,因此您不会立即收到响应。
当您收到来自我们的票务跟踪系统的电子邮件时,您就会知道您的提交已被处理。这封电子邮件会给你一个票号。一旦您的补丁被发送到票证跟踪系统,它也将被发送到perl5-porters@perl.org列表。
补丁程序将在p5p列表中进行审查和讨论。使用简单、无争议的补丁时,通常不会进行任何讨论。应用修补程序后,票据将被更新,您将收到电子邮件。此外,将向p5p列表发送一封电子邮件。
在其他情况下,补丁需要更多的工作或讨论。这将发生在p5p列表上。
我们鼓励您参与讨论并为您的补丁进行宣传。有时候你的补丁可能会在洗牌中丢失。如果一个月内没有采取任何行动,可以向p5p发送一封提醒邮件。请记住,Perl 5开发人员都是志愿者,要有礼貌。
更改总是直接应用于主开发分支,称为“blead”。一些补丁可能会被后端口到维护分支。如果您认为您的补丁适合维护部门,请在提交时解释原因。
#正在接受你的修补程序
如果您要提交一个代码修补程序,您可以做一些事情来帮助Perl5Porter接受您的修补程序。
#面片样式
如果使用git检查Perl源代码,则使用git格式-补丁
将以适合Perl的样式生成补丁。这个格式-补丁
命令为您所做的每个提交生成一个修补程序文件。如果希望为所有提交发送单个补丁,可以使用差异比较
.
%git合并出血%吉特拉力%git差异显示my-branch-name
这将根据blead和当前分支之间的差异生成补丁。在生成diff之前,确保blead是最新的,这很重要,这就是我们调用的原因吉特拉力
第一。
如果可能,我们强烈建议您使用git。它会让你的生活更轻松,也会让我们的生活更容易。
然而,如果不使用git,仍然可以生成合适的补丁。您需要一个Perl源代码的原始副本来进行比较。搬运工更喜欢统一的差异。使用GNU差异
,您可以生成如下差异:
%diff-Npurd perl.pristine perl.mine
确保您使真正干净
在您的Perl副本中删除任何构建工件,否则可能会得到令人困惑的结果。
#提交消息
在编写要提交给Perl内核的每个补丁时,编写一条好的提交消息很重要。如果您的提交将包含一系列提交,这一点尤其重要。
提交消息的第一行应该是不带句点的简短描述。它应该不超过电子邮件的主题行,50个字符是一个很好的经验法则。
许多Git工具(Gitweb、GitHub、Git-log--prett=oneline,…)在提交摘要时只显示第一行(在50个字符处截断)。
提交消息应包括对修补程序纠正的问题或修补程序添加的新功能的描述。
作为一般经验法则,您的提交消息应该有助于了解Perl核心的程序员快速理解您正在尝试做什么、如何尝试做,以及为什么更改对Perl很重要。
为什么?
您的提交消息应该描述为什么您所做的更改很重要。当有人看到你六个月或六年后的变化时,你的意图应该很清楚。
如果你为了以后简化另一段代码而不推荐某个功能,那么就这么说。如果你要解决性能问题或添加新功能来支持其他一些核心,那么就提一下。
什么
您的提交消息应该描述您正在更改的Perl内核的哪一部分,以及您希望修补程序做什么。
怎么
虽然文档更改、新测试或琐碎的修补程序都不需要,但通常值得解释一下您的更改是如何工作的。即使你今天清楚了,下个月或明年搬运工也可能不清楚。
提交消息并不打算取代代码中的注释。提交消息应该描述所做的更改,而代码注释应该描述代码的当前状态。
如果您刚刚实现了一个新功能,包括文档、测试和注释良好的代码,那么一条简短的提交消息就足够了。然而,如果您只是在解析器或lexer中深层更改了一个字符,则可能需要编写一本小小说,以确保未来的读者理解您做了什么以及为什么要这样做。
确保充分注释代码。虽然没有必要对每一行进行注释,但任何利用操作符副作用、在被修补的函数之外产生变化或其他人可能会感到困惑的内容都应记录在案。如果你要出错,最好是在添加太多评论的一边出错,而不是添加太少。
最好的评论解释为什么?代码做它做的事,而不是它做什么.
一般来说,请遵循您正在修补的代码的特定样式。
特别是,请遵循以下通用准则来修补Perl源代码:
8宽标签(没有例外!)
代码为4宽缩进,嵌套CPP#定义为2宽缩进
尽量不要超过79列
ANSI C原型
用于缩进控件构造的未截断else和“K&R”样式
没有C++样式(//)注释
用XXX标记需要重访的地方(并且经常重访!)
当条件跨越多行时,左大括号与“if”对齐;否则应在直线的末尾
在函数定义中,名称从第0列开始(返回值位于前一行)
后面跟paren的关键字后面只有一个空格,函数名和后面paren之间没有空格
避免条件句中的赋值,但如果不可避免,则使用额外的paren,例如“if(a&&(b=c))…”
“return foo;”而不是“returns(foo);”
“如果(!foo)…”而不是“如果(foo==FALSE)…”等。
#测试套件
如果您的补丁更改了代码(而不仅仅是更改文档),您还应该包括一个或多个测试用例,这些用例说明您正在修复的错误或验证您正在添加的新功能。通常,您应该更新现有的测试文件,而不是创建新的测试文件。
您的测试套件添加通常应遵循以下指南(由Gurusamy Sarathy提供<gsar@activestate.com>):
知道你在测试什么。阅读文档和源代码。
倾向于失败,而不是成功。
严格解释结果。
使用无关的功能(这将消除奇怪的交互)。
使用非标准的习惯用法(否则您不是在测试TIMTOWTDI)。
尽可能避免使用硬编码的测试编号(在t/op/tie.t中找到的EXPECTED/GOT更易于维护,并提供更好的故障报告)。
当测试失败时,给出有意义的错误消息。
避免使用qx//和system(),除非您正在测试它们。如果您确实使用了它们,请确保涵盖了_all_perl平台。
取消链接您创建的任何临时文件。
使用$SIG{__WARN__}将意外警告升级为错误。
确保使用测试版本附带的库和模块,而不是已经安装的那些。
向代码中添加注释,解释您正在测试的内容。
不需要更新“1..42”字符串。或者确保您更新了它。
测试给定运算符、库或函数的所有行为(_a)。
测试所有可选参数。
在各种上下文(布尔、标量、列表、左值)中测试返回值。
同时使用全局变量和词法变量。
不要忘记那些特殊的病理病例。
#修补核心模块
这就像修补其他任何东西一样,需要额外考虑一点。
一些核心模块也位于CPAN上,并在Perl核心之外进行维护。当作者更新模块时,更新只是复制到核心中。
中的模块注册会计师/源树的目录是在Perl核心之外维护的。请参阅文档中该模块的列表或其在上的列表http://search.cpan.org/有关报告错误和提交修补程序的更多信息。
相比之下距离/目录保存在核心中。
#更新perldelta
对于足以保证pod/perldelta.pod如果您在实际更改时提交一个delta条目,搬运工将非常感激。重大变化包括但不限于:
添加、弃用或删除核心功能
添加、弃用、删除或升级核心或双寿命模块
添加新的核心测试
修复核心中的安全问题和用户可见的错误
可能在perl或C级别破坏现有代码的更改
显著的性能改进
在中添加、删除或显著更改文档吊舱/目录
特定于平台的重要更改
请确保将perldelta条目添加到pod/perldelta.pod。有关如何编写良好的perldelta条目的更多信息,请参阅样式
第节,共节移植/how_to_write_a_perldelta.pod.
#什么是好补丁?
该语言的新特性和扩展可能会引起争议。没有一组特定的标准来确定添加了哪些功能,但在开发修补程序时需要考虑以下问题:
#这个概念符合Perl的总体目标吗?
我们的目标包括但不限于:
保持快速、简单和有用。
尽可能保持特性/概念正交。
没有任意限制(平台、数据大小、文化)。
在任何地方都可以使用/patch/ampository Perl,让它保持开放性和兴奋性。
要么吸收新技术,要么为它们搭建桥梁。
#实施在哪里?
没有实现,世界上所有的谈论都是无用的。几乎在任何情况下,支持新功能的人都应该是实现它的人。能够编码新功能的搬运工有他们自己的日程安排,无法实现你的(可能是好的)想法。
#向后兼容性
破坏现有的Perl程序是一大罪过。新的警告可能会引起争议——一些人说发出警告的程序没有被破坏,而另一些人则说是这样。添加关键字可能会破坏程序,更改现有标记序列或函数的含义可能会破坏节目。
Perl5核心包括一些机制,可以帮助移植程序使向后不兼容的更改更加兼容,例如特征和反对模块。请在适当的时候使用它们。
#可以改为模块吗?
Perl5具有扩展机制、模块和XS,特别是为了避免不断更改Perl解释器。你可以编写导出函数的模块,你可以给这些函数提供原型,这样它们就可以像内置函数一样被调用,如果你想实现真正复杂的东西,你甚至可以编写XS代码来扰乱Perl解释器的运行时数据结构。
只要有可能,新功能应该在CPAN模块中原型化,然后再考虑作为核心。
#该功能是否足够通用?
这是只有提交者想要添加到语言中的东西吗,还是广泛有用?有时,搬运工可能会决定等到有人实现更通用的功能时再添加功能,而不是集中精力添加功能。
#它是否可能引入新的错误?
彻底重写大量Perl解释器可能会引入新的错误。
#它有多大?
更改越小、越本地化,效果越好。类似地,一系列小补丁比一个大补丁更受欢迎。
#它是否排除了其他需要的功能?
如果一个补丁关闭了未来的发展途径,它很可能会被拒绝。例如,一个在原型上放置真实最终解释的补丁可能会被拒绝,因为对于原型的未来仍有一些选项尚未解决。
#实施是否稳健?
好的补丁(严密的代码、完整的、正确的)更有可能被使用。松散或不正确的补丁可能被放在次要位置,直到泵有时间修复为止,或者可能在没有进一步通知的情况下被完全丢弃。
#实现是否通用到可以移植?
最差的补丁程序使用系统特定的功能。Perl语言中不可移植的添加内容不太可能被接受。
#实现是否经过测试?
改变行为(修复错误或引入新功能)的补丁必须包括回归测试,以验证一切是否如预期那样工作。
如果没有原始作者提供的测试,其他任何人在将来更改perl时如何确保他们没有无意中破坏补丁实现的行为?如果没有测试,补丁的作者怎么能确信他/她的辛勤工作在补丁中不会在将来被人意外抛弃?
#有足够的文件吗?
没有文档的补丁可能是考虑不周或不完整的。没有文档就不能添加或更改任何功能,因此为相应的pod文档和源代码提交补丁非常重要。
#还有别的方法吗?
拉里说:“尽管Perl口号是有多种方法“我不太愿意用10种方法去做某事”。不过,这是一个很难驾驭的启发式方法——一个人的重要补充是另一个人的无用之物。
#它创造了太多的工作吗?
为泵工作,为Perl程序员工作,为模块作者工作。。。Perl应该很容易。
#补丁胜于雄辩
工作代码总是比pie-in-the-sky想法更受欢迎。与随机功能请求相比,添加功能的补丁更有可能被添加到语言中,无论请求有多么激烈。这与“它有用吗?”联系在一起,因为有人花时间制作补丁的事实表明了对该功能的强烈渴望。
核心使用与Perl其余部分相同的测试风格,即简单的“ok/not-ok”贯穿Test::Harness,但有一些特殊的注意事项。
在核心中编写测试有三种方法。测试::更多,t/测试.pl和临时打印$test?“ok 42\n”:“不正常42\n”
。使用哪个测试套件的决定取决于您正在使用的测试套件的哪个部分。这是一种防止高级故障(例如Config.pm中断)导致基本功能测试失败的措施。
这个t/测试.pl库提供了以下功能测试::更多,但避免加载大多数模块,并使用尽可能少的核心功能。
如果您编写自己的测试,请使用测试任何协议.
t/底座和t/comp公司
由于我们不知道require是否有效,甚至不知道子程序是否有效,因此对这两个程序使用特别测试。小心操作,避免使用正在测试的功能。
吨/立方厘米,t/运行,t/io公司和t/操作
现在已经测试了基本require()和子例程,您可以使用t/测试.pl库。
您也可以有条件地使用某些库,如Config,但如果没有测试,请务必优雅地跳过它。
其他一切
现在已经测试了Perl的核心,测试::更多可以并且应该使用。您也可以在测试中使用完整的核心模块套件。
当您说“make test”时,Perl使用t/测试用于运行测试套件的程序(在Win32下使用的除外t/线束相反)。所有测试都从t吨/目录,不包含测试的目录。这会导致中的测试出现一些问题图书馆/,所以这里有一些修补的机会。
您必须三倍地意识到跨平台问题。这通常归结为使用文件::规范并避免类似的事情叉子()
和系统()
除非绝对必要。
#特殊进行测试
目标
有各种特殊的make目标可用于测试Perl,与标准的“test”目标略有不同。并不是所有人都能达到100%的成功率。其中许多具有多个别名,其中许多别名在某些操作系统上不可用。
测试_移植
这将在源树上运行一些基本的健全性测试,并有助于在提交修补程序之前捕获基本错误。
岩芯测试
运行珍珠所有岩芯测试(t吨/*和库/[a-z]*杂注测试)。
(在Win32上不可用)
测试.分离
运行所有测试B: :去除。并非所有测试都会成功。
(在Win32上不可用)
test.taintwarn测试
使用运行所有测试-t吨命令行开关。并不是所有的测试都会成功(当然,在它们被特别修复之前)。
(在Win32上不可用)
最小的
运行迷你雪茄在t/底座,t/comp公司,吨/立方厘米,t/运行,t/io公司,t/操作,吨/单位和吨/立方米测验。
测试.valgrind检查.valgrind utest.valgrind ucheck.valgrind
(仅在Linux中)使用内存泄漏+顽皮内存访问工具“valgrind”运行所有测试。日志文件将被命名测试名称.valgrind.
测试.温度扭曲测试
运行所有常规测试和一些额外测试。从Perl 5.8.0开始,唯一的额外测试是Abigail的JAPH,t/japh/abigail公司。t吨.
你也可以用t/线束通过给予-折磨
的参数t/线束.
utest ucheck test.utf8检查.utf8
使用-Mutf8运行所有测试。并非所有测试都会成功。
(在Win32上不可用)
最小测试.utf16测试.utf16
使用UTF-16编码的脚本运行测试,这些脚本使用此编码的不同版本进行编码。
制作utest.utf16
使用以下组合运行测试套件-utf8接口
和-utf16型
参数到t/测试.
(在Win32上不可用)
测试线束
使用运行测试套件t/线束控制程序,而不是t/测试.t/线束更复杂,并使用测试::线束模块,因此使用此测试目标假设perl基本上可以工作。我们的主要优点是它在最后打印了失败测试的详细摘要。此外,与t/测试,它不会将stderr重定向到stdout。
请注意,在Win32下t/线束始终使用而不是t/测试,因此没有特殊的“test_hare”目标。
在Win32的“测试”目标下,您可以使用test_SWITCHES和test_FILES环境变量来控制t/线束这意味着你可以说
nmake test test_FILES=“操作/*.t”nmake test test_SWITCHES=“-pursion”test_FILES=“op/*.t”
测试-无效测试-无效
在运行正常测试之前,将PERL_SKIP_TTY_TEST设置为true。
#平行测试
核心发行版现在可以在类Unix平台上并行运行回归测试。而不是跑步进行测试
,套测试_作业
在您的环境中,要并行运行的测试数量制作测试线束
。在一个类似Bourne的外壳上,可以这样做
TEST_JOBS=3使TEST_线束#并行运行3个测试
使用环境变量,而不是并行生成本身,因为TAP::线束需要能够调度单个非冲突测试脚本本身,并且没有标准接口来制作
实用程序与作业调度程序交互。
注意,当前一些测试脚本在并行运行时可能会失败(最显著的是下一个/IO/t/IO_dir.t
). 如有必要,只需按顺序再次运行出现故障的脚本,并查看故障是否消失。
#手动运行测试
您可以通过使用来自t吨/目录:
./perl-I./lib TEST列表-.t-files
或
./perl-I./lib线束列表-.t-files
(如果不指定测试脚本,则将运行整个测试套件。)
#使用t/线束用于测试
如果您使用马具
对于测试,您有几个可用的命令行选项。参数如下所示,并且按照它们在一起使用时必须出现的顺序排列。
harness-v-track-re=要测试的文件的模式列表挽具-v-酷刑-重新列出要匹配的图案
如果要测试的文件列表
则从清单中获取文件列表。文件列表可能包含将展开的shell通配符。
-v(v)
在详细模式下运行测试,以便可以查看运行的测试和调试输出。
-折磨
进行酷刑测试和正常测试。
-re=图案
筛选文件列表,以便所有测试文件都运行匹配的PATTERN。请注意,此表单不同于-重新列出模式它还允许提供文件列表。
-重新列出模式
筛选文件列表,以便所有测试文件都运行match/(list | OF | PATTERNS)/。请注意,使用此表单,模式由“|”连接,您不能提供文件列表,而是从MANIFEST获取测试文件。
您可以通过类似以下命令运行单个测试
./perl-I../lib路径/to/foo。t吨
但线束设置了一些可能影响测试执行的环境变量:
PERL_CORE=1
表示我们正在将此测试作为perl核心测试套件的一部分运行。这对于CPAN上具有双重寿命的模块很有用。
PERL_DESTRUCT_LEVEL=2级
如果尚未设置,则设置为2(请参见perlhacktips中的“PERL_DESTRUCT_LEVEL”).
佩尔
(仅由使用t/测试)如果设置了,则覆盖应该用于运行测试的perl可执行文件的路径(默认为./perl).
PERL_SKIP_TTY_TEST测试
如果设置了,则告知跳过需要终端的测试。它实际上是由Makefile自动设置的,但也可以通过运行“maketest_notty”人为强制设置。
#可能影响测试的其他环境变量
性能测试网
设置此变量将运行所有Net::Ping模块测试,否则将跳过与外部世界交互的一些测试。请参见perl58三角洲.
性能测试否
设置此变量将跳过OS2::REXX的vrexx.t测试。
性能测试转换
这将在op/numconvert.t中设置一个变量。
有关影响测试的更多环境变量,请参阅测试和测试:线束模块的文档。
#更多关于肠胃病患者的阅读
要攻击Perl内核,您需要阅读以下内容:
珍珠源
Perl源代码树概述。这将帮助您找到要查找的文件。
珍珠层
对Perl解释器源代码的概述,以及关于Perl如何执行其操作的一些详细信息。
珀尔哈克图特
本文档介绍了Perl C代码的一个小补丁的创建过程。如果您刚刚开始使用Perl核心黑客,这将帮助您了解它是如何工作的。
perlhacktips(perlhack技巧)
有关攻击Perl内核的更多详细信息。本文档侧重于底层细节,如如何编写测试、编译问题、可移植性、调试等。
如果你打算进行严重的C黑客攻击,请务必阅读本文。
珍珠胶
这一点至关重要,因为它是Perl源代码中内容的文档。反复阅读几次,它可能会开始有意义——如果还没有,不用担心,因为研究它的最佳方法是结合阅读Perl源代码,我们稍后会这样做。
Gisle Aas的“带插图的珍珠肠”,也称为illguts公司,有非常有用的图片:
http://search.cpan.org/dist/illguts/
珀尔克斯图特和珍珠色
XSUB编程的实用知识对核心黑客非常有用;XSUB使用从PP代码中提取的技术,PP代码是实际执行Perl程序的内核部分。从简单的例子和解释中学习这些技巧比从核心本身学习要温和得多。
珀拉皮
Perl API的文档解释了一些内部函数的功能,以及源代码中使用的许多宏。
端口/泵.pod
这是一本关于Perl搬运工的智慧之言集;其中一些只对南瓜架有用,但大多数适用于任何想要进行Perl开发的人。
perl5-porters常见问题解答
这应该可以从以下地址获得http://dev.perl.org/perl5/docs/p5p-faq.html . 它包含有关阅读perl5-porters的提示、有关perl5-波特如何工作以及Perl开发一般如何工作的信息。
#CPAN测试仪和PERL吸烟者
CPAN测试人员(网址:http://testers.cpan.org/)是一组志愿者,他们在各种平台上测试CPAN模块。
Perl吸烟者(http://www.nntp.perl.org/group/perl.daily-build/和http://www.nntp.perl.org/group/perl.daily-build.reports/)在具有各种配置的平台上自动测试Perl源代码版本。
这两项努力都欢迎志愿者。为了参与perl本身的烟雾测试,请访问http://search.cpan.org/dist/Test-Smoke网站/为了开始烟雾测试CPAN模块,请访问http://search.cpan.org/dist/CPANPLUS-YACSmoke网站/或http://search.cpan.org/dist/minismokebox/或http://search.cpan.org/dist/cpan-Reporter网站/.
#下一步怎么办?
如果您已经阅读了文档中的所有文档以及上面列出的文档,那么您已经做好了破解Perl的准备。
这里还有一些建议
订阅perl5-porters,遵循补丁并尝试理解它们;不要害怕问你是否有不清楚的地方——谁知道呢,你可能会在补丁中发现一个漏洞。。。
请阅读与操作系统相关的README,例如IBM aix OS上的README.aix。如果您发现在新的操作系统版本中有任何缺失或更改,请毫不犹豫地为该README提供补丁。
找到一个您感兴趣的Perl领域,看看您是否能够理解它的工作原理。扫描源代码,并在调试器中单步跳过它。玩,戳,调查,小提琴!你可能不仅会了解你选择的领域,还会了解更广泛的珍珠的活动,可能比你想象的要快。
#“这条路从它开始的那扇门一直延伸下去。”
如果您能做到这些,那么您已经开始了Perl移植的漫长道路。感谢您想帮助改进Perl,并让它变得更快乐!
如果你能认出上面关于这条路的引述,那你就很幸运了。
大多数软件项目以每个文件的用途的文字描述作为每个文件的开头。相反,Perl以一个文学典故开始每个文件。
与许多书籍中的章节一样,所有顶级Perl源文件(以及其他一些文件)都以一个警句开头,间接地和隐喻地暗示您将要阅读的材料。
引用自J.R.R.托尔金关于他的传奇故事的著作,几乎总是来自指环王.章节和页码使用以下版本给出:
霍比特人J.R.R.托尔金著。使用了2007年70周年纪念版的精装本,由Harper Collins出版社在英国出版,Houghton Mifflin公司在美国出版。
指环王,作者:J.R.R.托尔金。2004年的精装本是50周年纪念版,由哈珀·柯林斯出版社在英国出版,由霍顿·米夫林公司在美国出版。
Beleriand的Lays这本书由J.R.R.托尔金撰写,由他的儿子兼文学执行人C.J.R.托尔金在死后出版,是克里斯托弗长毛象十二卷中的第三卷中土历史页码来源于精装版,由George Allen&Unwin于1983年首次出版;2002年出版的三卷本特别综合版或各种贸易版的页码都没有改变,现在又是哈珀·柯林斯(Harper Collins)或霍顿·米夫林(Houghton Mifflin)出版的。
因此,其他JRRT图书的公平报价游戏将包括汤姆·邦巴迪尔历险记,精灵宝钻,未完成的故事、和胡林孩子的故事除了CJRT在死后组装的第一个外,其他都是。但是指环王它本身很好,如果你能在那里找到合适的报价,可能是最好的报价。
因此,如果您要提供一个新的、完整的顶级源文件来添加到Perl中,您应该遵循这种特殊的做法,从Tolkien中选择一个合适的引号,保留原来的拼写和标点,并使用与其余引号相同的格式;记住,这是一个隐喻,所以成为元毕竟是为了什么。
本文档最初由Nathan Torkington编写,由perl5-porters邮件列表维护。