Wie kann ich zwei Dateien in Perl unterscheiden?

8

Ich habe zwei Textdateien, die dieselben Werte haben müssen.

%Vor%

Öffnen Sie Dateien in Perl

%Vor%

Wie kann ich einen solchen Unterschied innerhalb von Perl machen? Hat Perl ein eingebautes Diff oder muss ich das Dienstprogramm unix diff benutzen? Ich möchte meinen eigenen Diff-Algorithmus dafür nicht implementieren.

Ich brauche die Information, wo sich meine Dateien unterscheiden, aber ich brauche das Unix-Dienstprogramm diff nicht unbedingt. Das war nur ein Beispiel.

    
Lazer 27.08.2010, 06:10
quelle

3 Antworten

12

Sie könnten versuchen, Text :: Diff

Alternativ könnte das UNIX-Dienstprogramm eine Option sein.

    
cubic1271 27.08.2010 06:12
quelle
5

Wenn ich nur wissen müsste, dass sie gleich sind (dh nicht herausfinden, wie sie unterschiedlich sind), verwende ich einfach Digest :: MD5 , um zu sehen, ob sie mit dem gleichen Digest kommen. Es gibt eine verschwindend geringe Chance, dass zwei verschiedene Dateien den gleichen MD5-Digest haben könnten, also könnten Sie Digest :: SHA1 .

Wenn Sie herausfinden möchten, welche Zeilen unterschiedlich sind, können Sie vielleicht Algorithm :: Diff verwenden in Verbindung mit Tie :: File . Es gibt jedoch auch ein diff -Programm, das mit Algorithm :: Diff geliefert wird habe kein diff-Tool auf deiner Zielplattform. Obwohl Sie sich damit abmildern können, möchten Sie vielleicht einfach kopieren, was es in eine Subroutine tut. Text :: Diff ist auf Algorithmus :: Diff aufgebaut, so dass es vielleicht schon gewünscht ist.

    
brian d foy 27.08.2010 08:23
quelle
1

Nein, Perl hat keine eingebaute "diff" -Funktion. Entweder Sie verwenden ein externes Modul oder verwenden Perls Datenstrukturen (Hashes, Arrays usw.) oder Sie erstellen Dateihandles für beide Dateien und iterieren die Dateien mit dem Dateihandle (while-Schleifen) und vergleichen sie Zeile für Zeile. Diese Methode setzt voraus, dass Ihre Dateien sortiert sind. Eine andere nicht so elegante Art ist es, von Perl "diff" zu nennen, aber davon rate ich ab.

Wenn Perl kein Muss ist, verwenden Sie einfach das Dienstprogramm Unix diff (schreiben Sie ein Shell-Skript).

    
ghostdog74 27.08.2010 08:47
quelle

Tags und Links