2008/12/31 Qiang (James) &lt;<a href="mailto:shijialee@gmail.com">shijialee@gmail.com</a>&gt;:<br>&gt;&gt; CPAN上做PM的Dependency Check和显示的工具叫什么?<br>&gt;<br>&gt; CPAN 打包模块常用的有 Module::Build 或 Module::Install(基于ExtUtils::<br>&gt; MakeMaker). 每个打包工具可设定 Dependecy 的模块和版本.<br>
&gt;<br>&gt; 另外 CPAN 也提供一个不错的在线查找模块 Dependency 工具<br>&gt; <a href="http://deps.cpantesters.org/">http://deps.cpantesters.org/</a><br>&gt;<br><br>根据 CPAN Dependencies 网页上的提示:<br><br> &nbsp;&quot;It relies on modules having META.yml files so it can work out their dependencies, and is case-sensitive.&quot;<br>
<br>所以对于 CPAN 模块而言,扫描它们自己的 META.yml 文件即可.而 META.yml 中的依赖项一般也是 CPAN 模块的作者自己手工列出的. 不过有趣的是 Jifty 有一个 .t 文件自己扫描实际使用的模块并将之与 Makefile.PL 中列出的进行比较:<br><br><a href="http://search.cpan.org/src/SARTAK/Jifty-0.80408/t/01-dependencies.t">http://search.cpan.org/src/SARTAK/Jifty-0.80408/t/01-dependencies.t</a><br>
<br>本质上是一种源码级别的正则扫描:<br><br> &nbsp; &nbsp;# look for use and use base statements<br> &nbsp; &nbsp;$used{$1}{$File::Find::name}++ while $data =~ /^\s*use\s+([\w:]+)/gm;<br> &nbsp; &nbsp;while ($data =~ m|^\s*use base qw.([\w\s:]+)|gm) {<br> &nbsp; &nbsp; &nbsp; &nbsp;$used{$_}{$File::Find::name}++ for split &#39; &#39;, $1;<br>
 &nbsp; &nbsp;}<br><br>因此不是 100% 可靠的东西,但能满足需要 ^_^ 这小片代码其实来自 CPAN 上的 Test::Dependencies::Light 模块( Jifty 为了减少一个依赖项就把代码内联了,呵呵,它原先确实是使用 Test::Dependencies 模块的).<br><br>真正运行时级别上的依赖项扫描, 可能当属 pp 工具使用的 Module::ScanDeps 模块了.呵呵. (Test::Dependencies::Heavy 模块会实际编译 Perl 代码.)<br>
<br>&gt;&gt; 打算利用元旦假期整理下很多PM的关系,并且Display出一张图.<br>&gt;<br><br>我很有兴趣把你的代码整合到 UML::Class::Simple 中来,如果你愿意分享的话,呵呵.<br><br>&gt; 感觉应该有人做过类似的工作, 可以找找.<br>&gt;<br><br>Qiang 所言极是 ^_^<br><br>&gt;&gt; 谢谢, 祝各位新年快乐-工作顺利,身体健康!<br>&gt;&gt;<br>
<br>新年好!新年好!<br><br>Cheers,<br>-agentzh<br>