The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
CHANGELOG 078
CHANGES 610
MANIFEST 27
MANIFEST.SKIP 02
META.json 050
META.yml 2024
Makefile.PL 1116
lib/Data/Compare.pm 1713
t/FIXME-large-structures.t 0421
t/lib/SpecialClass.pm 012
t/overload.t 015
t/saritha-nalagandla-bug.t 11
t/taint.t 11
13 files changed (This is a version diff) 113640
@@ -0,0 +1,78 @@
+1.25    2013-04-15  DCANTRELL  Add Gianni Ceccarelli's tests and patch
+				 to Use refaddr & reftype to "do the right
+				 thing" when comparing objects that overload
+				 numification and stringification
+
+1.24    2014-04-05  DCANTRELL  Bump the required JSON.pm version for
+                                 tests - something's a bit broken around
+                                 about v 2.53
+
+1.23    2013-09-26  DCANTRELL  Add David Muir Sharnoff's tests for
+                                 really big data structures (but not yet
+                                 working);
+                               Check for taint-mode less insanely, thanks
+                                 to Ilmari;
+                               Don't delay loading File::Find::Rule (see
+                                 RT 87554)
+
+1.22    2010-02-12  DCANTRELL  Previous release was in error.  Instead, fix
+                                 the problem, circular structures now
+                                 compare equal, no matter what the starting
+                                 point (see RT 52836)
+
+1.2102  2010-02-01  DCANTRELL  Add doco about structural vs data equivalence
+                                 (see RT 52836)
+
+1.2101  2009-05-05  DCANTRELL  Add full licence text; -I fix in taint tests
+                                 to cope with paths with a space in 'em
+                                 (thanks to MATISSE, see RT 45676)
+
+1.21    2008-08-21  DCANTRELL  Extra tests added in 1.20 now skip with
+                                 really old JSON
+
+1.20    2008-08-21  DCANTRELL  Added test for bug reported by Saritha
+                                 Nalagandla (no bug found, but you can never
+                                 have too many tests!)
+                               Fixed bug in PERL5LIB splitting in taint test
+                                 (thanks to ADAMK, see RT 38319)
+
+1.19    2008-05-12  DCANTRELL  Can now compare structures with repeats in 'em
+                                 like [\$z, \$z] (bug reported by Todd Hepler)
+                               Minor code tidying
+
+1.18    2008-01-15  DCANTRELL  Got rid of prototypes;
+                               File::Find::Rule now only loads when needed;
+                               Plugins can be ignored with a null import() list;
+                               Explicitly documented the auto-export;
+                               Got rid of diagnostics pragma
+
+0.17    2007-08-07  DCANTRELL  Added POD test
+                               Fixed buggy POD :-)
+                               Fixed problem with taint testing when PERL5LIB
+                                 is set (thanks to Andreas Koenig for finding
+                                 the bug)
+                               Minor doco fiddling
+0.16    2007-02-27  DCANTRELL  Taint test and detection made less stupid
+0.15    2007-02-25  DCANTRELL  Skip taint tests on perl 5.6 and earlier
+0.14    2006-11-01  DCANTRELL  Fixed deeply nested objects (see rt.cpan #6966)
+0.13    2004-11-09  DCANTRELL  Oops, left in some debugging output
+0.12    2004-11-09  DCANTRELL  Fixed recursion detection bug - wasn't decrementing
+                               counter properly!  (thanks to Jenda for the bug
+                               report)
+0.11    2004-06-02  DCANTRELL  Now taint-safe - in taint mode there's no plugins
+                               (thanks Gabor Szabo for reporting the bug)
+0.10    2004-03-13  DCANTRELL  Replaced recursion detection with Rusty Conover's
+                               much better implementation.
+0.09    2004-02-23  DCANTRELL  Added deep recursion detection.
+0.08    2004-01-20  DCANTRELL  Added options, and ignore_hash_keys
+0.07    2004-01-07  DCANTRELL  Bugfix to avoid loading same plugin more than
+                               once.  S::P plugin renamed so it would work with
+                               this bugfix.  Clean-up of code.  Fix minor doc-bug
+                               in lib/Data/Compare/Plugins.pod.
+0.06    2004-01-06  DCANTRELL  Added plugins, moved Scalar::Properties support
+                               into a plugin (plugins were Jim Cromie's idea)
+0.05    2003-12-30  DCANTRELL  Applied mike@very.puzzling.org's patch for
+                               comparing compiled regexps
+0.04    2003-12-24  DCANTRELL  Applied aef's patch to correctly compare refs to
+                               refs to stuff
+0.03    2003-12-23  DCANTRELL  Added special-case handling for Scalar::Properties
@@ -1,61 +0,0 @@
-1.22    2010-02-12  DCANTRELL  Previous release was in error.  Instead, fix
-                                 the problem, circular structures now
-                                 compare equal, no matter what the starting
-                                 point (see RT 52836)
-
-1.2102  2010-02-01  DCANTRELL  Add doco about structural vs data equivalence
-                                 (see RT 52836)
-
-1.2101  2009-05-05  DCANTRELL  Add full licence text; -I fix in taint tests
-                                 to cope with paths with a space in 'em
-                                 (thanks to MATISSE, see RT 45676)
-
-1.21    2008-08-21  DCANTRELL  Extra tests added in 1.20 now skip with
-                                 really old JSON
-
-1.20    2008-08-21  DCANTRELL  Added test for bug reported by Saritha
-                                 Nalagandla (no bug found, but you can never
-                                 have too many tests!)
-                               Fixed bug in PERL5LIB splitting in taint test
-                                 (thanks to ADAMK, see RT 38319)
-
-1.19    2008-05-12  DCANTRELL  Can now compare structures with repeats in 'em
-                                 like [\$z, \$z] (bug reported by Todd Hepler)
-                               Minor code tidying
-
-1.18    2008-01-15  DCANTRELL  Got rid of prototypes;
-                               File::Find::Rule now only loads when needed;
-                               Plugins can be ignored with a null import() list;
-                               Explicitly documented the auto-export;
-                               Got rid of diagnostics pragma
-
-0.17    2007-08-07  DCANTRELL  Added POD test
-                               Fixed buggy POD :-)
-                               Fixed problem with taint testing when PERL5LIB
-                                 is set (thanks to Andreas Koenig for finding
-                                 the bug)
-                               Minor doco fiddling
-0.16    2007-02-27  DCANTRELL  Taint test and detection made less stupid
-0.15    2007-02-25  DCANTRELL  Skip taint tests on perl 5.6 and earlier
-0.14    2006-11-01  DCANTRELL  Fixed deeply nested objects (see rt.cpan #6966)
-0.13    2004-11-09  DCANTRELL  Oops, left in some debugging output
-0.12    2004-11-09  DCANTRELL  Fixed recursion detection bug - wasn't decrementing
-                               counter properly!  (thanks to Jenda for the bug
-                               report)
-0.11    2004-06-02  DCANTRELL  Now taint-safe - in taint mode there's no plugins
-                               (thanks Gabor Szabo for reporting the bug)
-0.10    2004-03-13  DCANTRELL  Replaced recursion detection with Rusty Conover's
-                               much better implementation.
-0.09    2004-02-23  DCANTRELL  Added deep recursion detection.
-0.08    2004-01-20  DCANTRELL  Added options, and ignore_hash_keys
-0.07    2004-01-07  DCANTRELL  Bugfix to avoid loading same plugin more than
-                               once.  S::P plugin renamed so it would work with
-                               this bugfix.  Clean-up of code.  Fix minor doc-bug
-                               in lib/Data/Compare/Plugins.pod.
-0.06    2004-01-06  DCANTRELL  Added plugins, moved Scalar::Properties support
-                               into a plugin (plugins were Jim Cromie's idea)
-0.05    2003-12-30  DCANTRELL  Applied mike@very.puzzling.org's patch for
-                               comparing compiled regexps
-0.04    2003-12-24  DCANTRELL  Applied aef's patch to correctly compare refs to
-                               refs to stuff
-0.03    2003-12-23  DCANTRELL  Added special-case handling for Scalar::Properties
@@ -1,6 +1,6 @@
 MANIFEST
 README
-CHANGES
+CHANGELOG
 MAINTAINERS-NOTE
 Makefile.PL
 TODO
@@ -27,4 +27,9 @@ t/saritha-nalagandla-bug/test082_updateevent_multipleinvitees.out
 ARTISTIC.txt
 GPL2.txt
 t/coverage.sh
-META.yml                                 Module meta-data (added by MakeMaker)
+t/FIXME-large-structures.t
+MANIFEST.SKIP
+t/overload.t
+t/lib/SpecialClass.pm
+META.yml                                 Module YAML meta-data (added by MakeMaker)
+META.json                                Module JSON meta-data (added by MakeMaker)
@@ -0,0 +1,2 @@
+.travis.yml
+^\.git
@@ -0,0 +1,50 @@
+{
+   "abstract" : "unknown",
+   "author" : [
+      "unknown"
+   ],
+   "dynamic_config" : 1,
+   "generated_by" : "ExtUtils::MakeMaker version 6.98, CPAN::Meta::Converter version 2.120351",
+   "license" : [
+      "unknown"
+   ],
+   "meta-spec" : {
+      "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
+      "version" : "2"
+   },
+   "name" : "Data-Compare",
+   "no_index" : {
+      "directory" : [
+         "t",
+         "inc"
+      ]
+   },
+   "prereqs" : {
+      "build" : {
+         "requires" : {
+            "ExtUtils::MakeMaker" : "0"
+         }
+      },
+      "configure" : {
+         "requires" : {
+            "ExtUtils::MakeMaker" : "0"
+         }
+      },
+      "runtime" : {
+         "requires" : {
+            "File::Find::Rule" : "0.1",
+            "Scalar::Util" : "0"
+         }
+      }
+   },
+   "release_status" : "stable",
+   "resources" : {
+      "bugtracker" : {
+         "web" : "https://github.com/DrHyde/perl-modules-Data-Compare/issues/new"
+      },
+      "repository" : {
+         "url" : "https://github.com/DrHyde/perl-modules-Data-Compare"
+      }
+   },
+   "version" : "1.25"
+}
@@ -1,22 +1,26 @@
---- #YAML:1.0
-name:               Data-Compare
-version:            1.22
-abstract:           ~
-author:  []
-license:            unknown
-distribution_type:  module
-configure_requires:
-    ExtUtils::MakeMaker:  0
+---
+abstract: unknown
+author:
+  - unknown
 build_requires:
-    ExtUtils::MakeMaker:  0
-requires:
-    File::Find::Rule:  0.1
-    Scalar::Util:      0
-no_index:
-    directory:
-        - t
-        - inc
-generated_by:       ExtUtils::MakeMaker version 6.50
+  ExtUtils::MakeMaker: 0
+configure_requires:
+  ExtUtils::MakeMaker: 0
+dynamic_config: 1
+generated_by: 'ExtUtils::MakeMaker version 6.98, CPAN::Meta::Converter version 2.120351'
+license: unknown
 meta-spec:
-    url:      http://module-build.sourceforge.net/META-spec-v1.4.html
-    version:  1.4
+  url: http://module-build.sourceforge.net/META-spec-v1.4.html
+  version: 1.4
+name: Data-Compare
+no_index:
+  directory:
+    - t
+    - inc
+requires:
+  File::Find::Rule: 0.1
+  Scalar::Util: 0
+resources:
+  bugtracker: https://github.com/DrHyde/perl-modules-Data-Compare/issues/new
+  repository: https://github.com/DrHyde/perl-modules-Data-Compare
+version: 1.25
@@ -1,13 +1,18 @@
-# -*- mode: Perl -*-
-
 use ExtUtils::MakeMaker qw(WriteMakefile);
 
-WriteMakefile(NAME         => "Data::Compare",
-              VERSION_FROM => "lib/Data/Compare.pm",
-	      PREREQ_PM    => {
-	          File::Find::Rule => 0.10,
-		  Scalar::Util     => 0
-              },
-              dist         => { COMPRESS => "gzip", SUFFIX => "gz" },
-	      clean        => { FILES => '*.bak *.old mibs/*.dump lib/*/*~' },
-              );
+WriteMakefile(
+  NAME         => 'Data::Compare',
+  META_MERGE => {
+    license => 'other',
+    resources => {
+      repository => 'https://github.com/DrHyde/perl-modules-Data-Compare',
+      bugtracker => 'https://github.com/DrHyde/perl-modules-Data-Compare/issues/new'
+    },
+  },
+  VERSION_FROM => "lib/Data/Compare.pm",
+  PREREQ_PM    => {
+    File::Find::Rule => 0.10,
+    Scalar::Util     => 0
+  },
+  clean        => { FILES => '*.bak *.old mibs/*.dump lib/*/*~' },
+);
@@ -2,7 +2,7 @@
 # Author: Fabien Tassin <fta@sofaraway.org>
 # updated by David Cantrell <david@cantrell.org.uk>
 # Copyright 1999-2001 Fabien Tassin <fta@sofaraway.org>
-# portions Copyright 2003 - 2010 David Cantrell
+# portions Copyright 2003 - 2013 David Cantrell
 
 package Data::Compare;
 
@@ -12,11 +12,12 @@ use warnings;
 use vars qw(@ISA @EXPORT $VERSION $DEBUG %been_there);
 use Exporter;
 use Carp;
-use Scalar::Util;
+use Scalar::Util qw(tainted);
+use File::Find::Rule;
 
 @ISA     = qw(Exporter);
 @EXPORT  = qw(Compare);
-$VERSION = 1.22;
+$VERSION = 1.25;
 $DEBUG   = $ENV{PERL_DATA_COMPARE_DEBUG} || 0;
 
 my %handler;
@@ -24,15 +25,12 @@ my %handler;
 use Cwd;
 
 sub import {
-  if(eval { chdir(getcwd()) }) { # chdir(getcwd()) isn't taint-safe
-    register_plugins();
-  }
+  register_plugins() unless tainted getcwd();
   __PACKAGE__->export_to_level(1, @EXPORT);
 }
 
 # finds and registers plugins
 sub register_plugins {
-  eval 'use File::Find::Rule';
   foreach my $file (
     File::Find::Rule->file()->name('*.pm')->in(
       map { "$_/Data/Compare/Plugins" }
@@ -119,6 +117,7 @@ sub Compare {
     (ref($x) && exists($been_there{"$x-$xpos-$xparent"}) && $been_there{"$x-$xpos-$xparent"} > 1) ||
     (ref($y) && exists($been_there{"$y-$ypos-$yparent"}) && $been_there{"$y-$ypos-$yparent"} > 1)
   ) {
+    $opts->{recursion_detector}--;
     return 1; # we bail as soon as possible, so if we've *not* bailed and have got here, say we're OK and go to the next sub-structure
   } else {
     $been_there{"$x-$xpos-$xparent"}++ if(ref($x));
@@ -145,7 +144,7 @@ sub Compare {
     elsif ($refx ne $refy) { # not the same type
       $rval = 0;
     }
-    elsif ($x == $y) { # exactly the same reference
+    elsif (Scalar::Util::refaddr($x) == Scalar::Util::refaddr($y)) { # exactly the same reference
       $rval = 1;
     }
     elsif ($refx eq 'SCALAR' || $refx eq 'REF') {
@@ -185,7 +184,7 @@ sub Compare {
       $rval = 0;
     }
     else { # a package name (object blessed)
-      my ($type) = "$x" =~ m/^$refx=(\S+)\(/;
+      my $type = Scalar::Util::reftype($x);
       if ($type eq 'HASH') {
         my %x = %$x;
         my %y = %$y;
@@ -379,9 +378,9 @@ the empty list, and then call the register_plugins class method:
 
 or you could call it as a function if that floats your boat.
 
-=head1 CODE REPOSITORY
+=head1 SOURCE CODE REPOSITORY
 
-L<http://www.cantrell.org.uk/cgit/cgit.cgi/perlmodules/>
+L<git://github.com/DrHyde/perl-modules-Data-Compare.git>
 
 =head1 BUGS
 
@@ -389,11 +388,6 @@ Plugin support is not quite finished (see the TODO file for details) but
 is usable.  The missing bits are bells and whistles rather than core
 functionality.
 
-Plugins are unavailable if you can't change to the current directory.  This
-might happen if you started your process as a priveleged user and then
-dropped priveleges.  This is due to how we check for Taintedness.  If this
-affects you, please supply a portable patch.
-
 Please report any other bugs either by email to David Cantrell (see below
 for address) or using rt.cpan.org:
 
@@ -411,7 +405,7 @@ Copyright (c) 1999-2001 Fabien Tassin. All rights reserved.
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
 
-Some parts copyright 2003 - 2010 David Cantrell.
+Some parts copyright 2003 - 2014 David Cantrell.
 
 Seeing that Fabien seems to have disappeared, David Cantrell has become
 a co-maintainer so he can apply needed patches.  The licence, of course,
@@ -421,6 +415,8 @@ distribution.
 
 =head1 SEE ALSO
 
+L<Test::Deep::NoTest>
+
 perl(1), perlref(1)
 
 =cut
@@ -0,0 +1,421 @@
+use strict;
+use warnings;
+use Test::More tests => 1;
+
+use Data::Compare;
+$SIG{ALRM} = sub { fail("timeout"); exit };
+alarm(5);
+
+TODO: {
+    local $TODO = "broken";
+    ok(0);
+    # ok(Data::Compare::Compare(_get_data()), "yay, didn't timeout");
+}
+
+sub _get_data {
+my $VAR1 = {
+'bodies' => bless( {
+'774e1dee53a6c80d99cca81f188abf91' => bless( {
+'body' => 'Get Lost!
+For the 2th time',
+'headers' => bless( {
+'340954c191bbbadfbd7ab37e62ac91c0' => bless( {
+'body' => {},
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Billy 2',
+'messages' => bless( {
+'340954c191bbbadfbd7ab37e62ac91c0' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => bless( {
+'From' => 'Jonny 1',
+'messages' => bless( {
+'0a763e41c9c22e1a97fcef68e37d2564' => bless( {
+'body' => bless( {
+'body' => 'Let me count the ways.... 3',
+'headers' => bless( {
+'0a763e41c9c22e1a97fcef68e37d2564' => {}
+}, 'Quarantine::BHeaders' )
+}, 'Quarantine::Body' ),
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Sally 3',
+'messages' => bless( {
+'0a763e41c9c22e1a97fcef68e37d2564' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => '0a763e41c9c22e1a97fcef68e37d2564'
+}, 'Quarantine::Header' ),
+'340954c191bbbadfbd7ab37e62ac91c0' => {},
+'655c7a5d8f36c58632a92e9c318fa9b4' => bless( {
+'body' => {},
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Fred 2',
+'messages' => bless( {
+'655c7a5d8f36c58632a92e9c318fa9b4' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => '655c7a5d8f36c58632a92e9c318fa9b4'
+}, 'Quarantine::Header' ),
+'7020baa09e5801d94724257ee8fba3bc' => bless( {
+'body' => bless( {
+'body' => 'Get Lost!
+For the 3th time',
+'headers' => bless( {
+'7020baa09e5801d94724257ee8fba3bc' => {},
+'ddd55caf8ac04ed3e75224cd12847bac' => bless( {
+'body' => {},
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Billy 3',
+'messages' => bless( {
+'ddd55caf8ac04ed3e75224cd12847bac' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => 'ddd55caf8ac04ed3e75224cd12847bac'
+}, 'Quarantine::Header' )
+}, 'Quarantine::BHeaders' )
+}, 'Quarantine::Body' ),
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Fred 3',
+'messages' => bless( {
+'7020baa09e5801d94724257ee8fba3bc' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => '7020baa09e5801d94724257ee8fba3bc'
+}, 'Quarantine::Header' ),
+'bbed5198630e5d982f474ddb946b5cb6' => bless( {
+'body' => bless( {
+'body' => 'Let me count the ways.... 2',
+'headers' => bless( {
+'bbed5198630e5d982f474ddb946b5cb6' => {}
+}, 'Quarantine::BHeaders' )
+}, 'Quarantine::Body' ),
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Sally 2',
+'messages' => bless( {
+'bbed5198630e5d982f474ddb946b5cb6' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => 'bbed5198630e5d982f474ddb946b5cb6'
+}, 'Quarantine::Header' ),
+'ddd55caf8ac04ed3e75224cd12847bac' => {}
+}, 'Quarantine::SMessages' )
+}, 'Quarantine::Sender' ),
+'uniq' => '340954c191bbbadfbd7ab37e62ac91c0'
+}, 'Quarantine::Header' ),
+'655c7a5d8f36c58632a92e9c318fa9b4' => {}
+}, 'Quarantine::BHeaders' )
+}, 'Quarantine::Body' ),
+'81a987f71ec224975ad33bcd09e9ebe4' => {},
+'e3973a2585798a8e85f3a9a6a6ece156' => {},
+'f5794e56fc5ecd3a92a3586da3b6392a' => {}
+}, 'Quarantine::Bodies' ),
+'buckets' => bless( {
+0 => bless( {
+'a' => bless( {
+'0a763e41c9c22e1a97fcef68e37d2564' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+3 => bless( {
+4 => bless( {
+'340954c191bbbadfbd7ab37e62ac91c0' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+6 => bless( {
+5 => bless( {
+'655c7a5d8f36c58632a92e9c318fa9b4' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+7 => bless( {
+0 => bless( {
+'7020baa09e5801d94724257ee8fba3bc' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+'b' => bless( {
+'b' => bless( {
+'bbed5198630e5d982f474ddb946b5cb6' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+'d' => bless( {
+'d' => bless( {
+'ddd55caf8ac04ed3e75224cd12847bac' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' )
+}, 'Quarantine::Buckets' ),
+'headers' => bless( {}, 'Quarantine::Headers' ),
+'recipients' => bless( {
+'Billy 2' => {},
+'Billy 3' => {},
+'Fred 2' => {},
+'Fred 3' => {},
+'Sally 2' => {},
+'Sally 3' => {}
+}, 'Quarantine::Recipients' ),
+'senders' => bless( {
+'Jonny 1' => {}
+}, 'Quarantine::Senders' )
+};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'body'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'recipients'}[0]{'messages'}{'340954c191bbbadfbd7ab37e62ac91c0'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'body'}{'headers'}{'0a763e41c9c22e1a97fcef68e37d2564'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'recipients'}[0]{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'sender'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'340954c191bbbadfbd7ab37e62ac91c0'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'}{'body'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'}{'recipients'}[0]{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'}{'sender'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'7020baa09e5801d94724257ee8fba3bc'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'}{'body'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'}{'recipients'}[0]{'messages'}{'ddd55caf8ac04ed3e75224cd12847bac'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'}{'sender'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'recipients'}[0]{'messages'}{'7020baa09e5801d94724257ee8fba3bc'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'sender'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'body'}{'headers'}{'bbed5198630e5d982f474ddb946b5cb6'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'recipients'}[0]{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'sender'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'ddd55caf8ac04ed3e75224cd12847bac'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'};
+$VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'655c7a5d8f36c58632a92e9c318fa9b4'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'};
+$VAR1->{'bodies'}{'81a987f71ec224975ad33bcd09e9ebe4'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'};
+$VAR1->{'bodies'}{'e3973a2585798a8e85f3a9a6a6ece156'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'body'};
+$VAR1->{'bodies'}{'f5794e56fc5ecd3a92a3586da3b6392a'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'body'};
+$VAR1->{'buckets'}{0}{'a'}{'0a763e41c9c22e1a97fcef68e37d2564'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'};
+$VAR1->{'buckets'}{3}{4}{'340954c191bbbadfbd7ab37e62ac91c0'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'};
+$VAR1->{'buckets'}{6}{5}{'655c7a5d8f36c58632a92e9c318fa9b4'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'};
+$VAR1->{'buckets'}{7}{0}{'7020baa09e5801d94724257ee8fba3bc'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'};
+$VAR1->{'buckets'}{'b'}{'b'}{'bbed5198630e5d982f474ddb946b5cb6'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'};
+$VAR1->{'buckets'}{'d'}{'d'}{'ddd55caf8ac04ed3e75224cd12847bac'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'};
+$VAR1->{'recipients'}{'Billy 2'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'recipients'}[0];
+$VAR1->{'recipients'}{'Billy 3'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'}{'recipients'}[0];
+$VAR1->{'recipients'}{'Fred 2'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'}{'recipients'}[0];
+$VAR1->{'recipients'}{'Fred 3'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'recipients'}[0];
+$VAR1->{'recipients'}{'Sally 2'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'recipients'}[0];
+$VAR1->{'recipients'}{'Sally 3'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'recipients'}[0];
+$VAR1->{'senders'}{'Jonny 1'} = $VAR1->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+
+
+my $VAR2 = {
+'bodies' => bless( {
+'774e1dee53a6c80d99cca81f188abf91' => bless( {
+'body' => 'Get Lost!
+For the 2th time',
+'headers' => bless( {
+'340954c191bbbadfbd7ab37e62ac91c0' => bless( {
+'body' => {},
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Billy 2',
+'messages' => bless( {
+'340954c191bbbadfbd7ab37e62ac91c0' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => bless( {
+'From' => 'Jonny 1',
+'messages' => bless( {
+'0a763e41c9c22e1a97fcef68e37d2564' => bless( {
+'body' => bless( {
+'body' => 'Let me count the ways.... 3',
+'headers' => bless( {
+'0a763e41c9c22e1a97fcef68e37d2564' => {}
+}, 'Quarantine::BHeaders' )
+}, 'Quarantine::Body' ),
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Sally 3',
+'messages' => bless( {
+'0a763e41c9c22e1a97fcef68e37d2564' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => '0a763e41c9c22e1a97fcef68e37d2564'
+}, 'Quarantine::Header' ),
+'340954c191bbbadfbd7ab37e62ac91c0' => {},
+'655c7a5d8f36c58632a92e9c318fa9b4' => bless( {
+'body' => {},
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Fred 2',
+'messages' => bless( {
+'655c7a5d8f36c58632a92e9c318fa9b4' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => '655c7a5d8f36c58632a92e9c318fa9b4'
+}, 'Quarantine::Header' ),
+'7020baa09e5801d94724257ee8fba3bc' => bless( {
+'body' => bless( {
+'body' => 'Get Lost!
+For the 3th time',
+'headers' => bless( {
+'7020baa09e5801d94724257ee8fba3bc' => {},
+'ddd55caf8ac04ed3e75224cd12847bac' => bless( {
+'body' => {},
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Billy 3',
+'messages' => bless( {
+'ddd55caf8ac04ed3e75224cd12847bac' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => 'ddd55caf8ac04ed3e75224cd12847bac'
+}, 'Quarantine::Header' )
+}, 'Quarantine::BHeaders' )
+}, 'Quarantine::Body' ),
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Fred 3',
+'messages' => bless( {
+'7020baa09e5801d94724257ee8fba3bc' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => '7020baa09e5801d94724257ee8fba3bc'
+}, 'Quarantine::Header' ),
+'bbed5198630e5d982f474ddb946b5cb6' => bless( {
+'body' => bless( {
+'body' => 'Let me count the ways.... 2',
+'headers' => bless( {
+'bbed5198630e5d982f474ddb946b5cb6' => {}
+}, 'Quarantine::BHeaders' )
+}, 'Quarantine::Body' ),
+'header' => 'Re: Stuff',
+'recipients' => bless( [
+bless( {
+'To' => 'Sally 2',
+'messages' => bless( {
+'bbed5198630e5d982f474ddb946b5cb6' => {}
+}, 'Quarantine::RMessages' )
+}, 'Quarantine::Recipient' )
+], 'Quarantine::RList' ),
+'sender' => {},
+'uniq' => 'bbed5198630e5d982f474ddb946b5cb6'
+}, 'Quarantine::Header' ),
+'ddd55caf8ac04ed3e75224cd12847bac' => {}
+}, 'Quarantine::SMessages' )
+}, 'Quarantine::Sender' ),
+'uniq' => '340954c191bbbadfbd7ab37e62ac91c0'
+}, 'Quarantine::Header' ),
+'655c7a5d8f36c58632a92e9c318fa9b4' => {}
+}, 'Quarantine::BHeaders' )
+}, 'Quarantine::Body' ),
+'81a987f71ec224975ad33bcd09e9ebe4' => {},
+'e3973a2585798a8e85f3a9a6a6ece156' => {},
+'f5794e56fc5ecd3a92a3586da3b6392a' => {}
+}, 'Quarantine::Bodies' ),
+'buckets' => bless( {
+0 => bless( {
+'a' => bless( {
+'0a763e41c9c22e1a97fcef68e37d2564' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+3 => bless( {
+4 => bless( {
+'340954c191bbbadfbd7ab37e62ac91c0' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+6 => bless( {
+5 => bless( {
+'655c7a5d8f36c58632a92e9c318fa9b4' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+7 => bless( {
+0 => bless( {
+'7020baa09e5801d94724257ee8fba3bc' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+'b' => bless( {
+'b' => bless( {
+'bbed5198630e5d982f474ddb946b5cb6' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' ),
+'d' => bless( {
+'d' => bless( {
+'ddd55caf8ac04ed3e75224cd12847bac' => {}
+}, 'Quarantine::Bucket2' )
+}, 'Quarantine::Bucket1' )
+}, 'Quarantine::Buckets' ),
+'headers' => bless( {}, 'Quarantine::Headers' ),
+'recipients' => bless( {
+'Billy 2' => {},
+'Billy 3' => {},
+'Fred 2' => {},
+'Fred 3' => {},
+'Sally 2' => {},
+'Sally 3' => {}
+}, 'Quarantine::Recipients' ),
+'senders' => bless( {
+'Jonny 1' => {}
+}, 'Quarantine::Senders' )
+};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'body'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'recipients'}[0]{'messages'}{'340954c191bbbadfbd7ab37e62ac91c0'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'body'}{'headers'}{'0a763e41c9c22e1a97fcef68e37d2564'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'recipients'}[0]{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'sender'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'340954c191bbbadfbd7ab37e62ac91c0'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'}{'body'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'}{'recipients'}[0]{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'}{'sender'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'7020baa09e5801d94724257ee8fba3bc'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'}{'body'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'}{'recipients'}[0]{'messages'}{'ddd55caf8ac04ed3e75224cd12847bac'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'}{'sender'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'recipients'}[0]{'messages'}{'7020baa09e5801d94724257ee8fba3bc'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'sender'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'body'}{'headers'}{'bbed5198630e5d982f474ddb946b5cb6'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'recipients'}[0]{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'sender'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'ddd55caf8ac04ed3e75224cd12847bac'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'};
+$VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'655c7a5d8f36c58632a92e9c318fa9b4'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'};
+$VAR2->{'bodies'}{'81a987f71ec224975ad33bcd09e9ebe4'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'};
+$VAR2->{'bodies'}{'e3973a2585798a8e85f3a9a6a6ece156'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'body'};
+$VAR2->{'bodies'}{'f5794e56fc5ecd3a92a3586da3b6392a'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'body'};
+$VAR2->{'buckets'}{0}{'a'}{'0a763e41c9c22e1a97fcef68e37d2564'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'};
+$VAR2->{'buckets'}{3}{4}{'340954c191bbbadfbd7ab37e62ac91c0'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'};
+$VAR2->{'buckets'}{6}{5}{'655c7a5d8f36c58632a92e9c318fa9b4'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'};
+$VAR2->{'buckets'}{7}{0}{'7020baa09e5801d94724257ee8fba3bc'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'};
+$VAR2->{'buckets'}{'b'}{'b'}{'bbed5198630e5d982f474ddb946b5cb6'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'};
+$VAR2->{'buckets'}{'d'}{'d'}{'ddd55caf8ac04ed3e75224cd12847bac'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'};
+$VAR2->{'recipients'}{'Billy 2'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'recipients'}[0];
+$VAR2->{'recipients'}{'Billy 3'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'body'}{'headers'}{'ddd55caf8ac04ed3e75224cd12847bac'}{'recipients'}[0];
+$VAR2->{'recipients'}{'Fred 2'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'655c7a5d8f36c58632a92e9c318fa9b4'}{'recipients'}[0];
+$VAR2->{'recipients'}{'Fred 3'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'7020baa09e5801d94724257ee8fba3bc'}{'recipients'}[0];
+$VAR2->{'recipients'}{'Sally 2'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'bbed5198630e5d982f474ddb946b5cb6'}{'recipients'}[0];
+$VAR2->{'recipients'}{'Sally 3'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'}{'messages'}{'0a763e41c9c22e1a97fcef68e37d2564'}{'recipients'}[0];
+$VAR2->{'senders'}{'Jonny 1'} = $VAR2->{'bodies'}{'774e1dee53a6c80d99cca81f188abf91'}{'headers'}{'340954c191bbbadfbd7ab37e62ac91c0'}{'sender'};
+
+return ($VAR1, $VAR2);
+}
+
@@ -0,0 +1,12 @@
+package SpecialClass;
+use strict;use warnings;
+use overload
+    '""' => \&to_string,
+    '0+' => \&to_number,
+        fallback=>1;
+
+sub new { my ($class,%data) = @_; bless {%data},$class }
+sub to_string { return $_[0]->{str} || 'foo' }
+sub to_number { return $_[0]->{num} || 12 }
+
+1;
@@ -0,0 +1,15 @@
+use strict;
+use warnings;
+use lib 't/lib';
+use SpecialClass;
+
+use Data::Compare;
+use Test::More tests=>2;
+
+ok(!Compare(SpecialClass->new(str=>'bar'),
+            SpecialClass->new(str=>'bar',num=>15)),
+   'String overload does not fool it');
+
+ok(!Compare(SpecialClass->new(str=>'bar',num=>15),
+            SpecialClass->new(str=>'boo',num=>15)),
+   'Numeric overload does not fool it');
@@ -6,7 +6,7 @@ use Data::Compare;
 eval "use JSON";
 if($@) {
     eval 'use Test::More skip_all => "no JSON support";exit 0';
-} elsif($JSON::VERSION < 2) {
+} elsif($JSON::VERSION < 2.9) {
     eval 'use Test::More skip_all => "JSON module too old";exit 0';
 } else {
     eval 'use Test::More tests => 2';
@@ -16,7 +16,7 @@ if($^O =~ /vms/i) {
     $ENV{PERL5LIB} = '';
     exec(
         join(' ',
-            $^X,
+            $Config{perlpath},
             '-Tw',
             (
 		# map { "-I$_" }