Recursively compare the content of two arbitrary Perl data structures
Content |
Tested on |
Debian (Etch, Lenny, Squeeze) |
Fedora (14) |
Ubuntu (Hardy, Intrepid, Jaunty, Karmic, Lucid, Maverick, Natty, Trusty) |
Objective
To recursively compare the content of two arbitrary Perl data structures
Scenario
Suppose you are writing a test harness for a Perl function called get_credentials
which returns a hash ref. You know exactly what value it should return and wish to test whether it has done so.
Method
You can compare Perl data structures using the Data::Compare
module. First the module must be installed. On Debian-based systems it is located in the package libdata-compare-perl
:
apt-get install libdata-compare-perl
The next step is to load the module. The function that you are most likely to need, called Compare
, is imported by default:
use Data::Compare;
You should now be able to compare any two data structures by passing them to the Compare
function:
my $returned_data = get_credentials; my $expected_data = {username=>'user',password=>'xyzzy'}; if (!Compare($returned_data,$expected_data)) { die 'unexpected response from get_credentials'; }
The value returned by Compare
is 1 if the values match or 0 if they do not.
Tags: perl