簡體   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