Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: A simple Comparison

by btrott (Parson)
on Jun 30, 2000 at 21:11 UTC ( [id://20628]=note: print w/replies, xml ) Need Help??


in reply to A simple Comparison

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. }

Replies are listed 'Best First'.
Re^2: A simple Comparison
by njh@bandsman.co.uk (Acolyte) on Jul 24, 2015 at 14:19 UTC
    This doesn't work if one or both of the objects is global, Storable::freeze will fail with "Can't store GLOB items".
      GLOB and "global" are two different things. You can easily freeze global variables, but you can't freeze typeglobs, see "Typeglobs and Filehandles" in perldata.
      use Storable; bless our $x = [], 'My::class'; print Storable::freeze($x); # No error, $x is global. bless my $y = \*STDERR, 'My::class'; print Storable::freeze($y); # Can't store GLOB items, $y is le +xical.
      لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://20628]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (4)
As of 2024-04-19 01:33 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found