http://www.perlmonks.org?node_id=799931


in reply to Fastest data structure compare?

Using Storable is problematic, because it's not guaranteed that semantically equivalent data is serialized in the same way. Here's an example playing with the internal utf-8 flag --- while Test::More's is_deeply and Data::Compare get it right, checking the serialized Storable data fails:
#!/usr/bin/perl use Data::Compare qw(); use Storable qw(nfreeze); use Test::More qw(no_plan); my $data1 = ["f\xfcbar"]; my $data2 = [substr("f\xfcbar\x{0100}", 0, -1)]; is_deeply($data1, $data2, "is_deeply test"); ok(Data::Compare::Compare($data1, $data2), "Data::Compare"); ok(nfreeze($data1) eq nfreeze($data2), "storable serialized");
I just benchmarked Test::More::is_deeply vs. Data::Compare and found that the latter is 3x faster for a data set which size is ~6MB as a storable-serialized file. This probably depends on the structure of the data set.