Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Use callbacks on computed differences
Perl
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib/Algorithm/Diff
t
.gitignore
Changes
README.pod
dist.ini

README.pod

NAME

Algorithm::Diff::Callback - Use callbacks on computed differences

VERSION

version 0.100

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,
        added   => sub { say 'Happy to hear about ', shift },
        deleted => sub { say 'Sorry to hear about ', shift },
    );

Or using hashes:

    use Algorithm::Diff::Callback 'diff_hashes';

    diff_hashes(
        \%old_details,
        \%new_details,
        added   => sub { say 'Gained ', shift },
        deleted => sub { say 'Lost ',   shift },
        changed => sub {
            my ( $key, $before, $after ) = @_;
            say "$key changed from $before to $after";
        },
    );

DESCRIPTION

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 or Hashes) and set callbacks for the diff process.

EXPORT

You'll need to declare to explicitly export these functions.

diff_arrays

diff_hashes

    use Algorithm::Diff::Callback qw<diff_arrays diff_hashes>;

SUBROUTINES/METHODS

diff_arrays(\@old, \@new, %callbacks)

The first two parameters are array references to compare.

The rest of the parameters are keys for the type of callback you want and the corresponding callback. You can provide multiple callbacks. Supported keys are:

  • added
        diff_arrays(
            \@old, \@new,
            added => sub {
                my $value = shift;
                say "$value was added to the array";
            }
        );
  • deleted
        diff_arrays(
            \@old, \@new,
            deleted => sub {
                my $value = shift;
                say "$value was deleted from the array";
            }
        );

diff_hashes(\%old, \%new, %callbacks)

The first two parameters are hash references to compare.

The rest of the parameters are keys for the type of callback you want and the corresponding callback. You can provide multiple callbacks. Supported keys are:

  • added
        diff_hashes(
            \%old, \%new,
            added => sub {
                my ( $key, $value ) = @_;
                say "$key ($value) was added to the hash";
            }
        );
  • deleted
        diff_hashes(
            \%old, \%new,
            deleted => sub {
                my ( $key, $value ) = @_;
                say "$key ($value) was deleted from the hash";
            }
        );
  • changed
        diff_hashes(
            \%old, \%new,
            changed => sub {
                my ( $key, $before, $after ) = @_;
                say "$key in the hash was changed from $before to $after";
            }
        );

BUGS

Please report bugs on the Github issues page at http://github.com/xsawyerx/algorithm-diff-callback/issues.

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:

DEPENDENCIES

Algorithm::Diff

List::MoreUtils

Carp

Exporter

AUTHOR

Sawyer X <xsawyerx@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2012 by Sawyer X.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

Something went wrong with that request. Please try again.