|File Search||Catalog||Content Search|
perl-Algorithm-Diff - Compute `intelligent' differences between two files / lists… more info»
This is a module for computing the difference between two files, two strings, or any other two lists of things. It uses an intelligent algorithm similar to (or identical to) the one used by the Unix `diff' program. It is guaranteed to find the *smallest possible* set of differences. It was originally written by Mark-Jason Dominus, firstname.lastname@example.org and was re-written and is now being maintained by Ned Konz, email@example.com. Mark-Jason still maintains a mailing list. To join a low-volume mailing list for announcements related to diff and Algorithm::Diff, send an empty mail message to firstname.lastname@example.org. This package contains a few parts: Algorithm::Diff Module that contains the `diff' function, which computes the differences betwen two lists and returns a data structure that represents these differences. You can then use the data structure to generate a formatted output in whatever format you like. The `diff' programs included in this package use Algorithm::Diff::diff to find the differences, and then theyjust format the output. Algorithm::Diff also includes some other useful functions such as `LCS', which computes the longest common subsequence of two lists. A::D is suitable for many other uses. For example, you could use it for finding the smallest set of differences between two strings, or for computing the most efficient way to update the screen if you were replacing `curses'. Algorithm::DiffOld An alternative module for those of you who HAVE to have the old interface (which uses a comparision function rather than a key generating function). Note that this is many times (20?) slower than Algorithm::Diff, because it has to do M*N comparisons rather than M+N key generations or so for Algorithm::Diff. diff.pl Implementation of `diff' in Perl that is as simple as possible so that you can see how it works. The output format is not compatible with regular `diff'. diffnew.pl Implementation of Unix `diff' in Perl with full bells and whistles. By Mark-Jason, with code from cdiff.pl included. cdiff.pl `diff' that generates real context diffs in either traditional format or GNU unified format. Original contextless `context' diff supplied by Christian Murphy. Modifications to make it into a real full-featured diff with -c and -u options supplied by Amir D. Karger. Yes, you can use this program to generate patches. OTHER RESOURCES `Longest Common Subsequences', at http://www.ics.uci.edu/~eppstein/161/960229.html This code was adapted from the Smalltalk code of Mario Wolczko <email@example.com>, which is available at ftp://st.cs.uiuc.edu/pub/Smalltalk/MANCHESTER/manchester/4.0/diff.st THANKS SECTION Thanks to Mark-Jason Dominus for doing the original Perl version and maintaining it over the last couple of years. Mark-Jason has been a huge contributor to the Perl community and CPAN; it's because of people like him that Perl has become a success. Thanks to Mario Wolczko <firstname.lastname@example.org> for writing and making publicly available his Smalltalk version of diff, which this Perl version is heavily based on. Thanks to Mike Schilli <email@example.com> for writing sdiff and traverse_balanced and making them available for the Algorithm::Diff distribution. (From Mark-Jason Dominus' earlier versions): Huge thanks to Amir Karger for adding full context diff supprt to `cdiff.pl', and then for waiting patiently for five months while I let it sit in a closet and didn't release it. Thank you thank you thank you, Amir! Thanks to Christian Murphy for adding the first context diff format support to `cdiff.pl'.