The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
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'.