मैंने अपने आप को अतीत में इस समस्या में भाग लिया है। मैंने एक त्वरित छोटा प्रोग्राम एक साथ थप्पड़ मार दिया है जो सबराउटिन खोजने के लिए पीपीआई का उपयोग करता है। यह कोड को थोड़ा सा सामान्य करता है (व्हाइटस्पेस सामान्यीकृत, टिप्पणियां हटा दी जाती हैं) और किसी भी डुप्लिकेट की रिपोर्ट करती है। काफी अच्छी तरह से काम करता है। पीपीआई सभी भारी भारोत्तोलन करता है।
आप प्रत्येक दिनचर्या में सभी वैरिएबल नामों को सामान्य रूप से $ ए, $ बी, $ सी और सामान्य रूप से तारों के समान कुछ करने के द्वारा सामान्यीकरण को थोड़ा अधिक स्मार्ट बना सकते हैं। इस पर निर्भर करता है कि आप कितना आक्रामक होना चाहते हैं।
#!perl
use strict;
use warnings;
use PPI;
my %Seen;
for my $file (@ARGV) {
my $doc = PPI::Document->new($file);
$doc->prune("PPI::Token::Comment"); # strip comments
my $subs = $doc->find('PPI::Statement::Sub');
for my $sub (@$subs) {
my $code = $sub->block;
$code =~ s/\s+/ /; # normalize whitespace
next if $code =~ /^{\s*}$/; # ignore empty routines
if($Seen{$code}) {
printf "%s in $file is a duplicate of $Seen{$code}\n", $sub->name;
}
else {
$Seen{$code} = sprintf "%s in $file", $sub->name;
}
}
}
मुझे "अनावश्यक" कहने पर आपका क्या मतलब है, इस बारे में बिल्कुल निश्चित नहीं है। क्या आप एकाधिक सबस के बारे में बात कर रहे हैं कि सभी एक ही काम करते हैं? या सब्स के बारे में जो कभी नहीं बुलाया जाता है? अथवा दोनों? – innaM