perl - Perl 代码中的依赖关系

标签 perl

我被指派去挑选一个用一些旧的 Perl Legacy 代码编写的 web 应用程序,让它在我们的服务器上运行,以便以后扩展它。代码是 10 年前由一个孤独的自学开发人员编写的......

代码中有一些奇怪的东西 - 他们不怕do lib-param.pl在第一行,然后在文件 do /lib-pl/lib-param.pl - 这当然是一个不同的文件。

包括a.pl与方法 b()c()及以后包括 d.pl与方法 c()e()似乎也很流行......包似乎是未知的,所以你稍后会在代码中的某个地方找到 &c() 。

有趣的问题:

  • 有没有可以绘制 perl 文件之间关系的工具?显示被其他文件使用的文件列表?
  • MySQL 数据库和表也一样吗?它可以显示哪些文件使用哪些模式/表吗?
  • 是否有一个 IDE 知道调用哪个 c() - a.pl 中的那个还是 d.pl 中的那个?
  • 您将如何开始尝试理解代码?

  • 我倾向于遍历每个文件并重构它,但不允许这样做 - 只有严格的最低限度才能使代码正常工作。 (但由于代码从来没有 uses strict ,我不知道我是否会......)

    最佳答案

    不使用 strict 是一个错误——不要继续它。把东西移到 d.plD.pm (或者可能是一个更好的名称),如果代码是程序性的,则使用 Sub::Exporter将这些 subs 重新放入调用包中。 strict是词法的,你可以只为一个包打开它。比如你的新package D; .要找出正在调用的代码,请使用 Devel::SimpleTrace。

    perl -MDevel::SimpleTrace ./foo.pl
    

    现在任何警告都将伴随着完整的积压日志——在代码周围散布警告并运行它。

    我认为应该从这里删除 MySQL 问题。模式表映射与 perl 无关,在这个问题上似乎不合适。

    关于perl - Perl 代码中的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3364713/

    相关文章:

    perl - 未初始化的哈希键的默认值

    perl - Perl 中文件句柄引用的不同字符串表示形式

    sql - 无法使用域用户在 Linux 上使用 perl Sybase dbi 连接到 mssql 2008

    perl - 在运行的 Gtk3 Perl 应用程序中更改 TextView 小部件的字体大小

    perl - Perl 中如何检查文件是否存在?

    perl - 从复杂的 Perl 数据结构中删除空数组引用和单例数组引用

    regex - Perl 正则表达式 -?\d+(? :\.\d+)?

    regex - 如何从某个起始位置找到字符串中第一次出现的模式?

    perl - 来自 CGI 的用户名计算机名

    perl 如何确定 "raw symbol"的类型