http://qs321.pair.com?node_id=55890

nop has asked for the wisdom of the Perl Monks concerning the following question:

Am I missing something here? I want to use dclone to copy my object, and overloaded == and != to compare my object.

Here's my test code:
my $raw = Vhash->new(undefined=>0, i=>$p_ids, v=>[qw(so sd no nd)], d=>[Date::range($startdate, $validdate)]); my $xx = $raw->copy; if ($xx == $raw) {print "hurrah\n";} else {print "nope\n";}
Why is my comparison failing here ("nope")?

Here's the relevant object code:
package Vhash; use strict; use warnings; use Carp; use Data::Dumper; use Storable qw/freeze dclone/; use overload '==' => \&overload_eq; sub overload_eq { return freeze($_[0]) eq freeze($_[1]) } use overload '!=' => \&overload_ne; sub overload_ne { return freeze($_[0]) eq freeze($_[1]) } my $joinchar = ","; sub new { my $proto = shift; my $class = ref($proto) || $proto; my $self = {}; bless ($self, $class); $self->init(@_); return $self; } sub copy { my ($self) = @_; my $new = dclone($self); bless($new, ref($self)); return $new; } ...more...

Replies are listed 'Best First'.
Re: copying and comparing objects
by Fastolfe (Vicar) on Feb 02, 2001 at 03:09 UTC
    Try setting $Storable::canonical to true. The "CANONICAL REPRESENTATION" section of the Storable documentation briefly goes over comparing frozen data in this fashion.