有什么好的工具可以重构PerlWeb代码吗?

有什么好的工具可以重构PerlWeb代码吗?,perl,refactoring,lamp,Perl,Refactoring,Lamp,我目前正在开发PerlWeb应用程序LAMP样式,最近偶然发现了一些以前的开发人员留下的死亡迷宫式的代码。他留下了这么多神奇的数字和奇怪的逻辑,每次我必须通过它时,它都让我头疼 我现在正在学习单元测试,所以我想找到一些有用的工具来重构代码并编写单元测试,以确保我不会意外地破坏任何东西 对于LAMP perl有什么好的重构工具的建议吗? 最好是免费的:) 谢谢。也许,志愿者可以帮助你。无论如何,您可以自由提问:)vim!(或任何其他文本编辑器) 真的没有什么神奇的工具可以折射你的代码,有一些工具可

我目前正在开发PerlWeb应用程序LAMP样式,最近偶然发现了一些以前的开发人员留下的死亡迷宫式的代码。他留下了这么多神奇的数字和奇怪的逻辑,每次我必须通过它时,它都让我头疼

我现在正在学习单元测试,所以我想找到一些有用的工具来重构代码并编写单元测试,以确保我不会意外地破坏任何东西

对于LAMP perl有什么好的重构工具的建议吗? 最好是免费的:)

谢谢。

也许,志愿者可以帮助你。无论如何,您可以自由提问:)

vim
!(或任何其他文本编辑器)

真的没有什么神奇的工具可以折射你的代码,有一些工具可以(例如)重命名变量/函数,但它无法神奇地修复糟糕的代码结构或奇怪的逻辑。

我认为有一些“Perl”重构工具。。。但不要引用我的话;-)

可能也值得一看。但是,完整版本不像Eclipse/EPIC那样是免费的。你可以试试他们的开源版本,但我猜它不会有所有的功能

我没有使用过以上或任何其他重构工具。。。我使用vi/vim&TextMate编辑器以及它们提供的内容(或者我目前在这些编辑器中找到的内容!)


进行单元测试是一个良好的开端。还可以看看&这可能有助于扫清混乱,找到一些“代码气味”。

虽然它并没有真正深入地进行重构,但本文介绍了几个Vim映射,用于使用

他们的例子:

在正常模式下,当光标位于此行上方时,可以键入
\u d

--$|&&s|\n|-|;
。。。并将替换为:

s/\n/-/ if --$|;
$baz = 1 unless $foo and $bar;
这一行:

$foo and $bar or $baz = 1;
。。。将替换为:

s/\n/-/ if --$|;
$baz = 1 unless $foo and $bar;

Perl的动态特性意味着很难为其创建重构工具

然而,关于测试,您应该能够组合一些回归测试来帮助您进行测试。这是通过从现在的代码开始并捕获其当前输出来实现的。这可能是从命令行运行CGI脚本,并将生成的HTML保存到文件中

一旦您捕获到了这一点,您就可以更改代码,并在执行过程中检查HTML是否没有更改,这意味着代码没有中断。当发生更改时,您可以找到错误,或者更改测试以接受正确的新HTML


这可能是一个有点繁琐的设置,但从长远来看,会让你的生活更轻松。您应该尝试自动化这些测试,以使测试易于运行。签出测试::WWW::Mechanize和Test::LongString以及所有其他工具。

带有EPIC插件的Eclipse确实有一些重构支持。不像IntelliJ的Java重构工具那么复杂。但不是100%确定它会帮你解决问题。我使用它的方式是突出显示代码块并将它们移动到函数/方法中。在你的情况下,你可能会想对这些神奇的数字进行大量的搜索/替换

我假设您将使用Test::More来编写单元测试。其他一些EPIC工具可能会对此有所帮助(例如“todo”标记)

您还可以使用Test::WWW::Mechanize和Test::WWW::Selenium——在您的情况下,定义Selenium测试以确保不会破坏任何最终用户功能是非常有用的。虽然EPIC没有任何特别的帮助,但是在调试时应该可以使用它来逐步完成代码


祝你好运。:-)

有关重构Perl代码的信息,请参见Devel::Refactor-Perl扩展。
Padre有一些重构工具。 现在,重命名变量在一段时间内(两年左右)效果相当不错


免责声明:我是Padre的贡献者。

我一直在寻找一些工具,这些工具可以帮助我识别重构的不良代码气味,等等:)这看起来是一个有趣的网站+谢谢你让我们注意到这件事!EPIC允许您将代码块转换为子例程,但据我所知,它不允许您重命名例程或变量。我迫不及待地要他们添加这个功能。。。我厌倦了搜索和替换!我认为Padre:有词汇重构(在本页搜索“重构”)。我还没有尝试过这个工具,但我正计划尝试!看起来它仍处于早期(但至少目前处于活动状态)开发阶段。刚试用过Padre,重构工作不正常。您可能会得到一个“未知错误”,或者它无法实际重命名变量的所有发生项。