NAME Algorithm::Diff::Callback - Use callbacks on computed differences VERSION Version 0.03 SYNOPSIS Use callbacks in your diff process to get better control over what will happen. use Algorithm::Diff::Callback 'diff_arrays'; diff_arrays( \@old_family_members, \@new_family_members, sub { print 'Happy to hear about ', shift }, sub { print 'Sorry to hear about ', shift }, ); Or using hashes: use Algorithm::Diff::Callback 'diff_hashes'; diff_hashes( \%old_details, \%new_details, sub { print 'Lost ', shift }, sub { print 'Gained ', shift }, sub { my ( $key, $before, $after ) = @_; print "$key changed from $before to $after\n"; }, ); One of the difficulties when using diff modules is that they assume they know what you want the information for. Some give you formatted output, some give you just the values that changes (but neglect to mention how each changed) and some (such as Algorithm::Diff) give you way too much information that you now have to skim over and write long complex loops for. Algorithm::Diff::Callback let's you pick what you're going to diff (Arrays, Hashes) and set callbacks for the diff process. EXPORT diff_arrays diff_hashes SUBROUTINES/METHODS diff_arrays(\@old, \@new, \&removed, \&added) The first two parameters are array references to compare. The second two parameters are subroutine references which will be called and given the value that was either removed or added during the diff process. The comparison is explicitly the second one against the first one. That means that if you give a *removed* subroutine, it really means that a value that existed in the first arrayref does not exist in the second arrayref. If you gave a *added* subroutine, it really means that a value that did not exist in the first arrayref now exists in the second one. Note: if you do not wish to give a certain subroutine, you can simply provide undef: diff_arrays( \@old, \@new, undef, sub { 'added: ', $_[0], "\n" } ); diff_hashes(\%old, \%new, \&removed, \&added, \&change) The first two parameters are hash references to compare. The second two paramters are the subroutine references which will be called and given the key and value that was either removed or added during the diff process. The third parameter is a subroutine reference of information that changed between the first and second hashes. It will be given the key that was changed, the value it had before and the value it now has in the new reference. Note: if you do not wish to give a certain subroutine, you can simply provide undef: diff_hashes( \%old, \%new, undef, undef, sub { my ( $key, $before, $after ) = @_; print "$key changed from $before to $after\n"; }, ); AUTHOR Sawyer X, "" BUGS Please report bugs on the Github issues page at . SUPPORT This module sports 100% test coverage, but in case you have more issues... You can find documentation for this module with the perldoc command. perldoc Algorithm::Diff::Callback You can also look for information at: * Github issues tracker * RT: CPAN's request tracker * AnnoCPAN: Annotated CPAN documentation * CPAN Ratings * Search CPAN DEPENDENCIES Algorithm::Diff List::MoreUtils Carp Exporter LICENSE AND COPYRIGHT Copyright 2010 Sawyer X. This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License. See http://dev.perl.org/licenses/ for more information.