繁体   English   中英

我怎样才能缩小Perl脚本?

[英]How can I Minify a Perl Script?

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

不完全缩小,但您可以使用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 # 

考虑使用perltidy实用程序跨多个脚本“标准化”格式。

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

使文件不可读

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

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;
}

除了别人的回答,我想建议你阅读Ovid关于如何在Perl中检测重复代码的文章? 以及更多关于在Perl中查找重复代码的信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM