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,
mjd-perl-diff@plover.com and was re-written and is now being maintained
by Ned Konz, perl@bike-nomad.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
mjd-perl-diff-request@plover.com.
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
<mario@wolczko.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 <mario@wolczko.com> for writing and making
publicly available his Smalltalk version of diff, which this Perl
version is heavily based on.
Thanks to Mike Schilli <m@perlmeister.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'.