2009-09-22 8 views
14

Przez pewien czas przeszukiwałem Internet i nie byłem w stanie znaleźć żadnych bezpłatnych (lub tanich) narzędzi/narzędzi/modułów, które potrafiłyby analizować zbiór plików Perla (moduły lub skrypty) i powielać flagę lub sklonować lub skopiuj/wklej kod.Jak znaleźć kopiuj/wklej (duplikat, klon) w Perlu?

Teraz jestem lepszy, ale kiedyś kopiowałem i wklejałem fragmenty kodu w całym miejscu. Chciałbym to wyczyścić i naprawić stary duplikat kodu, ale doceniam trochę pomocy narzędziowej, więc nie będę musiał przechodzić przez cały mój stary kod za pomocą cienkiego grzebienia zębów. Ponadto ręczne rozpoznawanie tego rodzaju przestępstwa jest podatne na błędy.

+0

Możecie znaleźć ten węzeł Perl Monks interesujący: http://www.perlmonks.org/index.pl?node_id=667084 – daotoad

+2

Better byłoby nie skopiować i wkleić kod w pierwszej kolejności. Warto mimo to przejrzeć stary kod i (re) zapoznać się z nim; chyba że masz miliony linii kodu, powinieneś mieć ogólną koncepcję tego w głowie i być świadomym potencjalnych kandydatów do przepisywania/refaktoryzacji. – Ether

+0

Powiązane pytanie - http://stackoverflow.com/questions/2490884/why-is-copy-and-paste-of-code-dangerous – Oded

Odpowiedz

5

Funny similar question została wysłana do SO tylko kilka kilka minut temu:

Oto link do niektórych narzędzi, które możesz znaleźć ful.

Code Comparison and Plagirism Detection

+0

Czy możesz podać link do tego innego pytania? – innaM

+1

http://stackoverflow.com/questions/1461805/how-can-i-compare-similar-codebases - podobne pytanie o C++ – mob

+0

Oceniam produkt CodeMatch. Jednak aby pobrać oprogramowanie, musiałam pobrać listę e-maili z biuletynem korporacyjnym. Na szczęście użyłem jednorazowego adresu e-mail. –

4

Co masz na myśli przez powielający się kod? Po prostu dokładne dopasowania znaków lub semantyczne dopasowania.

Istnieje kilka narzędzi, takich jak http://pmd.sourceforge.net/, które mogą wykrywać duplikaty kodu według dopasowań ciągów, to narzędzie jest dla java, ale dopasowanie źródła działa na zwykłym tekście.

Jeśli chcesz semantycznego dopasowywania, jak

sub A 
{return 1;} 

dopasować

sub B 
{ 
    return 1; 
} 

Następnie trzeba czegoś innego :(

+0

Dzięki.Po prostu wypróbowałem wtyczkę PMD dla Eclipse i nie wygląda na to, że mogę skanować pliki perl (lub zwykły tekst). Dostępne opcje to Java, JSP, CPP, C, PHP, Ruby, Fortran. Dla chichotów spróbowałem pary i daje mi pusty raport kopiuj/wklej. –

+0

Domyślnie szuka bloków o długości około 30 linii. Używamy go dla naszego własnego języka, luźno opartego na Javascript i działa dobrze dla nas. – chollida

+3

Możesz uruchomić cały kod przez perltidy, aby wygładzić różnice stylistyczne (ale nie nazwy podprogramów). – Schwern

0

semantyczne Designs czyni produkt o nazwie Clone Dr., który wydaje się być w stanie analizować dużą liczbę typów językowych dla sklonowanych fragmentów kodu. Wydaje się jednak, że ich darmowa wersja testowa działa tylko w Javie i Cobolu.

+0

Jestem menedżerem produktu CloneDR. Zapewnia to (naszym zdaniem) naprawdę dobre wyniki dzięki porównywaniu AST dla programów, które całkowicie pozbywają się problemów związanych z formatowaniem. Obsługuje wiele języków, ale Perl nie jest obecnie jednym z nich. W końcu "tylko Perl może parsować Perla": -} [W rzeczywistości mamy bardzo dobre mechanizmy analizowania; któregoś dnia dotrzemy do Perla.] –

+1

Dobrze wiedzieć. Jednak może nie być zbyt wielu klientów dla Perla. Próbowałem twojej wersji testowej Clone'a doktora na starym projekcie JAVA, a ja byłem pod wrażeniem wyników. Właśnie to doświadczenie sprawiło, że zdałem sobie sprawę, że muszę przeanalizować całą resztę mojego kodu (z których niektóre zawierają duże skrypty Perla) do wykroczeń związanych z kopią/wklejaniem. –

+0

Można uzyskać wersje testowe dla języków Java, C#, C, C++, COBOL i PHP. Być może będziesz musiał zapytać na stronie internetowej. –

0

Właśnie oceniłem Simian. Ma 15-dniowy bezpłatny okres próbny i kosztuje sto dolarów za licencję dla jednego użytkownika. Nie oficjalnie obsługuje Perla, ale traktuje je jak zwykły tekst i analizuje je w każdym razie. To jest super szybkie narzędzie! I super łatwy w użyciu. Raport wygenerowany z tego narzędzia był prosty i łatwy do interpretacji. Całkowicie aprobuję to narzędzie. Teraz muszę porozmawiać z moim szefem i poprosić go o zakup licencji.

+0

P.S. Wysłałem e-mail do programistów Simiana i zapytałem ich, czy zamierzają wesprzeć Perla, i od razu odpisali, że support Perla nigdy nie przyszedł im do głowy, ale że umieścili to na swojej liście rzeczy do zrobienia. Nie jestem nawet płacącym klientem. To wspaniałe wsparcie. (chyba, że ​​mnie po prostu wysadzili) –

+0

Czy oni? Dociekliwe umysły chcą wiedzieć. Wydaje mi się, że Simian wymaga analizy leksykalnej, a Perl jest suczką do leksykonu, pozwalając sobie na parsowanie. –

2

W przeszłości korzystałem z usługi CCFinder, aby znaleźć sekcje kodu będące duplikatami. Działa całkiem nieźle, ale ma ... ciekawy interfejs. Nie ma natywnej obsługi perla, ale ma opcję zwykłego tekstu, która powinna działać przynajmniej w celu wykrycia kopiowania i wklejania. Istnieje system Windows i rozwiązanie Ubuntu - darmowy, niestety open source.

+0

Oh wow ... to jest świetne narzędzie! A sposób, w jaki wizualnie pokazuje twój duplikat kodu na działce scatter jest niesamowity! Myślę, że jest to najfajniejsza część wolnego oprogramowania, jaką kiedykolwiek doświadczyłem. Interfejs użytkownika jest początkowo trochę dziwny, ale gdy już się przyzwyczaisz do interfejsu, jest to cudownie potężny analizator duplikatów kodu. Ale dwa gnidy. Nie jest to platforma wieloplatformowa.I pozostawia wiele plików tymczasowych w swoim drzewie kodu źródłowego. –

+0

Byłem w stanie łatwo zmodyfikować jeden z plików Pythona, aby rozpoznać i zignorować komentarze POD i Perl. Teraz jeszcze bardziej podoba mi się CCFinder! (Musiał ręcznie usunąć wszystkie pliki tymczasowe i zrestartować, aby działał.) –

+0

Kod źródłowy jest dostępny na licencji MIT: http://www.ccfinder.net/ccfinderxos.html – hexcoder