If you compare them using
eq or
==, all
you're doing is comparing their values as references. And
since they're two different objects--ie. not references
to the same object--they're two different references. So
they won't be equal.
To do a proper object comparison, you'll need to write a
method that compares two of your objects. One possibility
would be to serialize the objects and compare the serialized
strings:
my $obj1 = new Obj;
my $obj2 = new Obj;
## The two objects above are now equal, let's say.
## Serialize them, then compare the serialized
## data.
use Storable qw/freeze/;
if (freeze($obj1) eq freeze($obj2)) {
## They're the same.
}
In fact, you could even use
overload to overload
the comparison operator so that the proper comparison
happens automagically:
package Obj;
use Storable qw/freeze/;
use overload '==' => \&compare;
sub compare { return freeze($_[0]) eq freeze($_[1]) }
Now you can just say:
if ($obj1 == $obj2) {
# They're the same.
}