我被分配了一个用旧的Perl Legacy代码编写的web应用程序,让它在我们的服务器上运行以便以后扩展它。该代码是10年前由一位自学成才的独立开发人员编写的......
代码中发生了奇怪的事情 - 他们并不害怕在第一行do lib-param.pl
,后来在文件do /lib-pl/lib-param.pl
中 - 这是一个不同的文件。
包含方法a.pl
和b()
的{{1}}以及方法c()
和d.pl
的{{1}}包括c()
似乎也非常受欢迎。 ..包似乎是未知的,所以你稍后会在代码中的某处找到& c()。
有趣的问题:
我倾向于浏览每个文件并重构它,但不允许这样做 - 只有严格的最小才能使代码正常工作。 (但由于代码永远不会e()
,我不知道我是不是......)
答案 0 :(得分:4)
不使用严格是一个错误 - 不要继续它。将d.pl
中的内容移动到D.pm
(或者可能是一个更好的名称),如果代码是程序性的,则使用Sub::Exporter
将这些子回到调用包中。 strict
是词法,你可以只为一个包打开它。比如你的新package D;
。要找出要调用的代码,请使用Devel :: SimpleTrace。
perl -MDevel::SimpleTrace ./foo.pl
现在任何警告都会附带一个完整的后退日志 - 在代码周围撒上警告并运行它。
我认为应该删除MySQL问题。模式表映射与perl无关,在这个问题上似乎不合适。
答案 1 :(得分:1)
我会写一个实用程序来扫描所有sub
的完整列表以及它们所在的文件;然后我会写一个实用程序给我一个所有函数调用的列表以及它们来自哪个文件。
顺便说一句,编写一个相当没有思维的静态分析工具来生成调用图并不是非常困难。
对于很多情况,在编写良好的代码中,这足以帮助我......