如何在Perl中找到复制/粘贴(复制,克隆)代码?

时间:2009-09-22 18:41:45

标签: perl clone static-analysis copy-paste code-duplication

我已经在互联网上搜索了一段时间,但我找不到任何可以分析一组Perl文件(模块或脚本)并标记重复或克隆的免费(或便宜)工具/实用程序/模块或复制/粘贴代码。

我现在好多了,但我过去常常复制并粘贴代码段。我想清理它并修复我的旧代码重复,但是一点点的工具帮助将会受到赞赏,所以我不需要用细齿梳子来完成我所有的旧代码。此外,手动识别此类攻击很容易出错。

6 个答案:

答案 0 :(得分:5)

有趣的是,similar question在几分钟前发布到了SO。

以下是您可能会发现有用的一些工具的链接。

Code Comparison and Plagirism Detection

答案 1 :(得分:4)

重复代码是什么意思?只是字符完全匹配或语义匹配。

有一些工具如http://pmd.sourceforge.net/可以通过字符串匹配检测重复代码,此工具适用于java,但源匹配适用于纯文本。

如果你想要语义匹配,比如

sub A
{return 1;}

匹配

sub B
{
    return 1;
}

然后你还需要别的东西:(

答案 2 :(得分:2)

我过去曾使用CCFinder来查找重复的代码段。它工作得很好,但有一个有趣的界面。它没有对perl的本机支持,但它确实有一个纯文本选项,至少可以用于检测复制和粘贴。有一个Windows和Ubuntu解决方案 - 免费软件,不幸的是不是开源的。

答案 3 :(得分:0)

Semantic Designs创建了一个名为Clone Dr.的产品,它似乎能够为克隆的代码段分析大量语言类型。但似乎他们的免费评估版仅适用于Java和Cobol。

答案 4 :(得分:0)

我刚刚评估了Simian。它有一个15天的免费评估期,单个用户许可证的成本为100美元。它没有正式支持Perl,但它确实将它们视为纯文本并进行分析。这是一个超快的实用程序!而且超级好用。使用此工具生成的报告简单易懂。我完全赞同这个工具。现在我只需要和我的老板谈谈并让他购买许可证。

答案 5 :(得分:0)

这是另一个列出一些克隆检测工具的网页:

http://sel.ics.es.osaka-u.ac.jp/cdtools/index-e.html