我怎样才能缩小Perl脚本?

Bry*_*eld 6 perl minify

我想缩小perl脚本,以便我可以检测几乎完全相同的perl脚本,这些脚本只有行注释,空行等不同.我有一个预先构建的脚本来进行这种缩小?如果是这样,我将能够自己校验和突出显示相同的文件.

Que*_*tin 7

不完全缩小,但您可以使用B::Deparse编译Perl脚本,然后将其反编译回Perl.

你可以区分结果.

一个简单的命令行示例如下:

david@Workstation:comp # perl -MO=Deparse 1.pl > a.pl
1.pl syntax OK
david@Workstation:comp # perl -MO=Deparse 2.pl > b.pl
2.pl syntax OK
david@Workstation:comp # diff a.pl b.pl
david@Workstation:comp # diff 1.pl 2.pl
3c3,5
< say "Hello";
---
> 
> 
>   say "Hello";
david@Workstation:comp # 
Run Code Online (Sandbox Code Playgroud)


Zai*_*aid 5

考虑使用该perltidy实用程序跨多个脚本"标准化"格式.

它甚至有一个'混淆'标志,在文档中解释:

使文件不可读

目标perltidy是提高文件的可读性,但有两个命令具有相反的效果,--mangle--extrude.它们实际上只是其他参数组合的别名.这两个都删除了所有可能的空格,但留下了注释和pod文档,因此它们基本上是可逆的....请注意,这些选项不提供任何有意义的混淆,因为perltidy可用于重新格式化文件.


Sil*_*dow 5

Code :: CutNPaste查找重复的Perl代码

use Code::CutNPaste;

my $cutnpaste = Code::CutNPaste->new(
    dirs         => [ 'lib', 'path/to/other/lib' ],
    renamed_vars => 1,
    renamed_subs => 1,
);
my $duplicates = $cutnpaste->duplicates;

foreach my $duplicate (@$duplicates) {
    my ( $left, $right ) = ( $duplicate->left, $duplicate->right );
    printf <<'END', $left->file, $left->line, $right->file, $right->line;

Possible duplicate code found
Left:  %s line %d
Right: %s line %d

END
    print $duplicate->report;
}
Run Code Online (Sandbox Code Playgroud)