在您睡眠时跟踪模块更改
我创建了Module::Extract::Use作为一款列出程序所使用的模块的简单工具,并最近添加了一些功能,以便更容易地为Perlmodules.net提供输入,从而为这些模块创建更改流。
我的日常工作很大程度上涉及帮助人们将旧代码转换为可测试、可分发和可安装的代码(我发现这种特别的繁琐工作很有趣,因为每个混乱都是独一无二的)。Jonathan Yu使用我的Module::Extract::Use创建了示例程序examples/extract_modules,我对其进行了一些扩展。以下是一些使用该脚本的示例。第一个示例是为了人类检查
# print a verbose text listing
$ extract_modules extract_modules
Modules required by examples/extract_modules:
- Getopt::Std (first released with Perl 5)
- Module::CoreList (first released with Perl 5.008009)
- Pod::Usage (first released with Perl 5.006)
- strict (first released with Perl 5)
- warnings (first released with Perl 5.006)
5 module(s) in core, 0 external module(s)
我添加了一些选项,以创建一个每行一个模块的未装饰列表
# print a succint list, one module per line
$ extract_modules -l extract_modules
Getopt::Std
Module::CoreList
Pod::Usage
open
strict
warnings
由于我喜欢xargs -0
允许我将多行表示为单个字符串,其中空八位为分隔符,因此我添加了一个开关来支持这一点
# print a succinct list, modules separated by null bytes
# you might like this with xargs -0
$ extract_modules -l -0 extract_modules
Getopt::StdModule::CoreListPod::Usageopenstrictwarnings
既然我在那里,不妨添加JSON输出
# print the modules list as JSON
$ extract_modules -j extract_modules
[
"Getopt::Std",
"Module::CoreList",
"Pod::Usage",
"open",
"strict",
"warnings"
]
如果你想要XML,那就麻烦了。实际上,我会接受补丁,但你可能需要编写一个JSON-to-XML转换器并将一些程序链接起来。记住,Perl是一种粘合语言!
请注意,此程序只能检测静态use
和require
语句中明确声明的命名空间。你不会在输出中看到Module::Extract::Use,因为这个程序隐式地使用它。这是一种很少发生且不会让我太烦恼的情况,而且这是我试图在可能的情况下将其重构出代码的东西。
我其中一个直接用途是安装独立程序的所有依赖项
$ extract_modules -l -0 some_program | xargs -0 cpan
这比以前我用的方法好多了:不断地尝试运行程序,直到它不再抱怨缺少依赖。有时仍然会发生这种情况,因为隐式依赖项,但正如我说的,这种情况很少。从那里,我还可以使用这个列表来构造我需要放入Makefile.PL中的文本。我考虑过为此编写程序,但我不认为它能节省我多少时间。我通常想查看列表,所以无需查看的自动化并不那么吸引人。
我喜欢用这些模块列表做另一件事。Alexander Karelas创建了网站PerlModules.net,用于创建模块集的更改流。他足够友好,通过赞助PerlTricks上的这篇文章来支持我的《学习Perl 6》Kickstarter活动。
从模块列表中,他确定它们属于哪个发行版,并diff所有那些Changes文件,以便向您展示所有这些diff。你(和大多数人)可能不会注意所有的更改。也许你会查看主要模块的Changes。你可能忽略其他更改,因为检查所有发行版是一堆工作。
你可以创建一个指定你想要跟踪的模块的feed。对于每个新版本,他会diff更改文件,并将该diff添加到你的feed中。如果你愿意,你可以为每个应用程序创建一个feed。当模块更改时,你会在feed中看到一条条目,可以阅读diff而不必追踪模块。
要获取我想要跟踪的模块列表,我可以用extract_modules
及其-l
开关来制作一个单命名空间每行的依赖项列表。这里我在项目的所有模块上使用extract_modules
$ find lib -name "*.pm" -print0 | xargs -0 extract_modules -l
Archive::Extract
Archive::Tar
Archive::Zip
... # long list elided
YAML::XS
base
parent
strict
subs
vars
warnings
我可以直接将这个列表粘贴到PerlModules.net的订阅源创建器中(或者有动力的人可以自动化这个过程,如果他们想创建很多订阅源)。
一旦我创建了订阅源,我可以通过多种方式查看它。虽然我可以访问网站查看有什么变化,或者当有变化时收到电子邮件。但我更喜欢使用RSS订阅源。有了这个订阅源,有动力的Perl程序员实际上有了一种通过获取和解析该订阅源来程序化获取变化列表的方法。
但是,现在是最困难的部分:在我们的分发中制作好的变化文件。这件事我会留到另一篇PerlTricks文章中讨论。
这篇文章最初发布在PerlTricks.com。
标签
brian d foy
brian d foy是一位Perl培训师和作家,也是Perl.com的高级编辑。他是《Mastering Perl》、《Mojolicious Web Clients》、《Learning Perl Exercises》的作者,以及《Programming Perl》、《Learning Perl》、《Intermediate Perl》和《Effective Perl Programming》的合著者。
浏览他们的文章
反馈
这篇文章有什么问题吗?请通过在GitHub上打开一个问题或拉取请求来帮助我们。