Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time
The module is a direct port from the Perl 5 version and should be close to 100% similair
other then some Perl 6 idioms.

Listed below is the original README:

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

This package contains a few parts.

Algorithm::Diff is the module that contains several interfaces for which
computing the differences betwen two lists.

The several "diff" programs also included in this package use
Algorithm::Diff to find the differences and then they 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 uses.  You can 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 is a previous version of the module which is included
primarilly for those wanting to use a custom comparison function rather
than a key generating function (and who don't mind the significant
performance penalty of perhaps 20-fold). implements a "diff" in Perl that is as simple as (was
previously) possible so that you can see how it works.  The output
format is not compatible with regular "diff".  It needs to be
reimplemented using the OO interface to greatly simplify the code. implements a "diff" in Perl with full bells and whistles.  By
Mark-Jason, with code from included. implements "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.


"Longest Common Subsequences", at

This code was adapted from the Smalltalk code of Mario Wolczko
<>, which is available at


Thanks to Ned Konz's for rewriting the module to greatly improve
performance, for maintaining it over the years, and for readilly handing
it over to me so I could plod along with my improvements.

(From Ned Konz's earlier versions):

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 <> for writing and making
publicly available his Smalltalk version of diff, which this Perl
version is heavily based on.

Thanks to Mike Schilli <> for writing sdiff and
traverse_balanced and making them available for the Algorithm::Diff

(From Mark-Jason Dominus' earlier versions):

Huge thanks to Amir Karger for adding full context diff supprt to
"", 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 "".


Perl 6 port of Algorithm::Diff






No releases published


No packages published